Java 瓦丁:如何在战争中添加META-INF/服务?
我有一个Vaadin 7 maven web项目,它有一些注释,可以在Java 瓦丁:如何在战争中添加META-INF/服务?,java,maven,maven-3,war,vaadin7,Java,Maven,Maven 3,War,Vaadin7,我有一个Vaadin 7 maven web项目,它有一些注释,可以在META-INF/services上创建服务定义 我将其添加到pom中,以便处理注释: org.bsc.maven maven处理器插件 3.3.1 过程 过程 生成源 这些文件显示在target/classes/META-INF/services中,但不会进入最终战争 我尝试将文件夹添加到maven war插件,如下所示: org.apache.maven.plugins maven战争插件 3.0.0 假的 目标/类
META-INF/services
上创建服务定义
我将其添加到pom中,以便处理注释:
org.bsc.maven
maven处理器插件
3.3.1
过程
过程
生成源
这些文件显示在target/classes/META-INF/services
中,但不会进入最终战争
我尝试将文件夹添加到maven war插件,如下所示:
org.apache.maven.plugins
maven战争插件
3.0.0
假的
目标/类别/*
但是大多数的瓦丁档案都没有进入战争,也不起作用。有什么想法吗?你可以试试这个:
<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>
过程
生成源
过程
${projectd}
相对项目目录
路径
我最终使用了这个不相关答案的方法:
下面是我最后做的:
<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>
org.apache.maven.plugins
maven战争插件
3.0.0
假的
目标/类/META-INF/服务
*.*
META-INF/服务
基本上添加了服务文件夹作为资源,并将其放置在最终战争的正确位置。请参见
看起来您的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/*
文件夹中,也不想对其进行版本设置
您可以通过向版本控制元数据添加忽略过滤器来解决此问题;或者通过创建符号链接;或者使用复制资源
,如前面的一些回答所述,但不推荐使用
您可以通过添加webResources
配置从target
文件夹复制生成的源代码来实现这一点
请看
org.apache.maven.plugins
maven战争插件
${project.build.directory}/target/generated sources
META-INF
*.类
查看一下以确保项目结构正确,并仔细检查复制的内容。maven编译器插件会自动为您运行注释处理器。你不需要特别的插件。处理器只需要位于编译器类路径中-通常作为提供的
作用域依赖项。在我的情况下,它不是生成源。是一个服务定义文件,但这已经足够接近了。
<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>