修改
好的我现在可以更具体了:
我的scr / main / resources中有一个文件夹META-INF,其中包含服务 /javax.annotation.processing.Processor
我的pom仍然是相同的(带注释)。 如果我执行“mvn clean install”,输出jar将只包含META-INF文件夹。
但如果我重命名文件夹 services ,则输出jar包含我的类和带有新重命名文件夹及其内容的META-INF文件夹。
我想 - 对于普通的maven2用户来说,这是一个简单的问题。 我有一个简单的子项目的简单pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>aida</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>aida-annotationProcessors</artifactId>
<packaging>jar</packaging>
<name>AIDA Annotation Processors</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
<!-- <resources> -->
<!-- <resource> -->
<!-- <directory>src/main/resources/services</directory> -->
<!-- <targetPath>META-INF/services</targetPath> -->
<!-- </resource> -->
<!-- </resources> -->
</build>
<dependencies>
</dependencies>
</project>
我的目标很简单: 我只想在我生成的jar的{root} / META-INF / services文件夹中复制我的src / main / resources / services / javax.annotation.processing.Processor文件。
但如果我取消注释资源部分,我的jar将只包含一个没有类的META-INF文件夹!
你能帮帮我吗?
答案 0 :(得分:6)
答案 1 :(得分:4)
更灵活的解决方案是使用注释处理器生成services/javax.annotation.processing.Processor
文件,这样类保持不变,如果项目依赖于其他注释处理器,则无需额外的工作。
META-INF/services generator位于主要回购中:
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
使用@MetaInfServices
注释处理器 - 请注意,我必须使用Processor.class
手动提供注释,否则会生成META-INF/services/javax.annotation.processing.AbstractProcessor
import org.kohsuke.MetaInfServices;
@MetaInfServices(javax.annotation.processing.Processor.class)
public class SoapPropertyProcessor extends AbstractProcessor
答案 2 :(得分:0)
以下是instructions from Apache如何做到这一点,但看起来你正确地做了。看看那个页面,确保你没有犯一些小错误。