【问题标题】:Maven copy src/main/resources/services folder to /META-INFMaven 复制 src/main/resources/services 文件夹到 /META-INF
【发布时间】:2012-05-06 09:33:26
【问题描述】:

编辑

好的,我现在可以更具体了:

我的 scr/main/resources 中有一个 META-INF 文件夹,其中包含 services/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>

我的目标很简单: 我只想将我的 src/main/resources/services/javax.annotation.processing.Processor 文件复制到我生成的 jar 的 {root}/META-INF/services 文件夹中。

但是如果我取消注释资源部分,我的 jar 将只包含一个没有类的 META-INF 文件夹!

你能帮帮我吗?

【问题讨论】:

    标签: maven-2


    【解决方案1】:

    这是 maven 编译器插件中的错误/功能..

    http://jira.codehaus.org/browse/MCOMPILER-97

    一种解决方法是禁用包含处理器的项目的注释处理,-proc:none。

    【讨论】:

    【解决方案2】:

    更灵活的解决方案是使用注释处理器来生成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
    

    【讨论】:

    • 这会给运行时带来完全不必要的依赖
    【解决方案3】:

    这里是instructions from Apache 说明如何做到这一点,但看来你做得正确。看看那个页面,确保你没有犯一些小错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 2017-06-22
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多