Vaadin:如何将 META-INF/services 添加到 war?
Vaadin: How to add META-INF/services to the war?
我有一个 Vaadin 7 maven web 项目,它有一些在 META-INF/services
上创建服务定义的注释。
我将其添加到 pom,以便处理注释:
<!-- 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>
文件显示在 target/classes/META-INF/services
内,但没有进入最终 war。
我尝试将文件夹添加到 maven-war-plugin 中,如下所示:
<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>
但是大多数 Vaadin 文件都没有进入 war 并且它不起作用。有什么想法吗?
你可以试试这个:
<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>
我最终使用了这个无关答案的方法:Maven: include folder in resource folder in the war build。
这是我最后做的事情:
<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>
基本上把services文件夹作为资源添加到最后war的正确位置。
请参阅https://maven.apache.org/plugins/maven-war-plugin/usage.html
您的 META-INF
文件夹似乎在 src/main/resources
目录中。
通常在创建 WAR
时,您会创建一个目录 src/main/webapp
,您可以在其中放置 WEB-INF
、META-INF
和其他所需的文件夹。
|-- src
| `-- main
| |-- java
| | `-- com
| | `-- example
| | `-- projects
| | `-- SampleAction.java
| |-- resources
| | `-- images
| `-- webapp
| |-- META-INF
| |-- WEB-INF
您 webapp
文件夹中的所有内容都将被复制到 WAR
中的根目录。
您的 webapp
的路径也可以使用 warSourceDirectory 属性
配置
对于您的方案 - 生成的源
显然,您不想将生成的源代码保存在 src/*
文件夹中,也不想对其进行版本控制。
您可以通过向版本控制元数据添加忽略过滤器来解决这个问题;或通过创建符号链接;或使用 copy-resources
正如之前的一些答案所说,但不推荐。
您可以通过添加 webResources
配置来实现此目的,通过
从 target
文件夹复制生成的源
请看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>
我有一个 Vaadin 7 maven web 项目,它有一些在 META-INF/services
上创建服务定义的注释。
我将其添加到 pom,以便处理注释:
<!-- 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>
文件显示在 target/classes/META-INF/services
内,但没有进入最终 war。
我尝试将文件夹添加到 maven-war-plugin 中,如下所示:
<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>
但是大多数 Vaadin 文件都没有进入 war 并且它不起作用。有什么想法吗?
你可以试试这个:
<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>
我最终使用了这个无关答案的方法:Maven: include folder in resource folder in the war build。
这是我最后做的事情:
<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>
基本上把services文件夹作为资源添加到最后war的正确位置。
请参阅https://maven.apache.org/plugins/maven-war-plugin/usage.html
您的 META-INF
文件夹似乎在 src/main/resources
目录中。
通常在创建 WAR
时,您会创建一个目录 src/main/webapp
,您可以在其中放置 WEB-INF
、META-INF
和其他所需的文件夹。
|-- src
| `-- main
| |-- java
| | `-- com
| | `-- example
| | `-- projects
| | `-- SampleAction.java
| |-- resources
| | `-- images
| `-- webapp
| |-- META-INF
| |-- WEB-INF
您 webapp
文件夹中的所有内容都将被复制到 WAR
中的根目录。
您的 webapp
的路径也可以使用 warSourceDirectory 属性
对于您的方案 - 生成的源
显然,您不想将生成的源代码保存在 src/*
文件夹中,也不想对其进行版本控制。
您可以通过向版本控制元数据添加忽略过滤器来解决这个问题;或通过创建符号链接;或使用 copy-resources
正如之前的一些答案所说,但不推荐。
您可以通过添加 webResources
配置来实现此目的,通过
target
文件夹复制生成的源
请看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>