【问题标题】:No .class file in the jar when adding a META-INF/services directory添加 META-INF/services 目录时 jar 中没有 .class 文件
【发布时间】:2014-08-26 12:23:31
【问题描述】:

我刚刚开始使用 Maven,但在为我的所有类创建 JAR 时遇到了麻烦。事实上,我必须包含一个位于WEB-INF/services/javax.annotation.processing.Processor的服务

我已经针对这个问题测试了不同的问题,似乎当我删除 /services 目录时,JAR 包含所有 .class 文件。

我读到这可能是一个错误的 Maven 文件夹结构,但是当我有 servicesdirectory 存在时,就会出现问题。

这是我使用资源的 pom.xml 文件的摘录:

<resource>
    <directory>${myRessources}</directory>
        <includes>
            <include>META-INF/**/*</include>
         </includes>
</resource>

maven 控制台告诉我资源已成功复制,所以我认为这部分不是问题。

有什么想法吗?

【问题讨论】:

  • 您的源文件在哪里?
  • 它们位于 src/main/java ;我的资源位于 src/main/resources 中,因此 META-INF 目录位于 src/main/resources/META-INF/services/*
  • 那么我认为你不需要明确定义包含标签
  • @JuriexFF 你能发布你完整的 pom.xml 吗?能否也检查下target/classes目录下生成的类文件?

标签: java maven jar meta-inf


【解决方案1】:

嘿,你想用这样的东西:

<build>
  <sourceDirectory>src/main/java (or your .java you want to compile)</sourceDirectory>
   <resources>
    <resource>
     <directory>src/main/resources/META-INF/</directory>
     <targetPath>META-INF</targetPath>
    </resource>
   </resources>
</build>

sourceDirectory 告诉 maven 编译什么并将其放入目标文件夹(以及 jar 中)。然后资源说将我的 META-INF/ 文件夹中的所有内容放入 jar 文件的 META-INF 文件夹中。

【讨论】:

  • 我对你没意见,但使用此解决方案,我的 .jar 文件不包含任何 .class 文件!
  • 这不应该是必要的,由于约定优于配置。
  • @Thomas 你能解释一下吗?
  • 嗯,默认情况下,Maven 使用src/main/java 作为源目录,src/main/resources 作为默认/约定的资源目录。因此,除非您需要特殊或不同的东西,否则无需指定。
  • 这就是我所需要的。就我而言,我必须将&lt;targetPath&gt; 设置为META-INF/services
【解决方案2】:

我调查并解决了这个问题:这是一个错误 --> http://jira.codehaus.org/browse/MCOMPILER-97 我添加了编译器选项 -proc:none,它现在可以正常工作了。希望它可以帮助其他人!

【讨论】:

    【解决方案3】:

    说到 *.jar 或 *.war 文件,可以引导您找到解决方案的是,在创建存档文件后,使用 WinRAR 打开它,然后检查其内容。

    在此之后,您可以在 pom.xml 文件中包含必要的资源,如前所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2011-10-31
      • 2015-12-19
      • 1970-01-01
      • 2014-08-14
      • 2020-11-03
      相关资源
      最近更新 更多