Tengo un proyecto web maven de Vaadin 7 que tiene algunas anotaciones que crean una definición de servicio en META-INF/services .
Agregué esto al pom para que se procesen las anotaciones:
<!-- Run annotation processors on src/main/java sources --> <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> </execution> </executions> </plugin> Los archivos se muestran dentro de target/classes/META-INF/services pero no llegan a la guerra final.
Intenté agregar la carpeta al complemento maven-war de esta manera:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <packagingIncludes>target/classes/*</packagingIncludes> </configuration> </plugin>Pero la mayoría de los archivos de Vaadin no llegan a la guerra y no funciona. ¿Alguna idea?
Consulte https://maven.apache.org/plugins/maven-war-plugin/usage.html
Parece que su carpeta META-INF está en el directorio src/main/resources .
Normalmente, al crear un WAR , crearía un directorio src/main/webapp donde puede tener su WEB-INF , META-INF y otras carpetas requeridas.
|-- src | `-- main | |-- java | | `-- com | | `-- example | | `-- projects | | `-- SampleAction.java | |-- resources | | `-- images | `-- webapp | |-- META-INF | |-- WEB-INF Todo lo que se encuentre en la carpeta de su webapp se copiará en el directorio raíz en WAR .
La ruta a su webapp también se puede configurar usando la propiedad warSourceDirectory
Obviamente, no desea mantener sus fuentes generadas en su carpeta src/* y no desea versionarlo.
Puede evitar esto agregando un filtro de ignorar a sus metadatos de control de versiones; o creando un enlace simbólico; o usar copy-resources como dijeron algunas respuestas anteriores, pero no recomendado.
Puede lograr esto agregando una configuración de webResources para copiar las fuentes generadas de la carpeta de target por
Consulte http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>${project.build.directory}/target/generated-sources</directory> <targetPath>META-INF</targetPath> <!-- introduced in plugin v 2.1 --> <includes> <include>*.class</include> </includes> </resource> </webResources> </configuration> </plugin>Puedes probar esto:
<execution> <id>process</id> <phase>generate-sources</phase> <goals> <goal>process</goal> </goals> <configuration> <finalName>${projectId}</finalName> <outputDirectory>relative project directory</outputDirectory> <includes> <include>path</include> </includes> </configuration> </execution>Terminé usando el enfoque de esta respuesta no relacionada: Maven: incluya la carpeta en la carpeta de recursos en la compilación de guerra .
Esto es lo que terminé haciendo:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <webResources> <resource> <directory>target/classes/META-INF/services</directory> <includes> <include>*.*</include> </includes> <targetPath>META-INF/services</targetPath> </resource> </webResources> </configuration> </plugin>Básicamente, agregó la carpeta de servicios como un recurso y la colocó en el lugar correcto de la guerra final.