【问题标题】:Maven: include files in JAR's META-INFMaven:在 JAR 的 META-INF 中包含文件
【发布时间】:2016-12-14 11:23:30
【问题描述】:

我正在使用 Maven 构建一个 Java 项目,我有几个文件 CHANGELOGLICENSE,我想将它们复制到 JAR 文件中的 META-INF 目录中。

到目前为止,我的工作如下:

<build>
    <resources>
        <resource>
            <directory>${project.basedir}</directory>
            <includes>
                <include>CHANGELOG</include>
                <include>LICENSE</include>
            </includes>
            <targetPath>META-INF</targetPath>
        </resource>
    </resources>
    <plugins>
        ...

但编译时也会将这两个文件复制到classes/META-INF 目录。

所以我希望这些文件包含在 JAR 文件中,但没有其他地方。有没有办法做到这一点?

【问题讨论】:

    标签: java maven jar maven-jar-plugin meta-inf


    【解决方案1】:

    通过添加 webResources

    修改您的 pom
    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <webResources>
                        <resource>
                            <directory>target/classes/META-INF/</directory>
                            <includes>
                                <include>*.*</include>
                            </includes>
                            <targetPath>META-INF/</targetPath>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
    

    考虑 config.properties 文件位于

    src / main / resources / META-INF / config.properties
    

    战争示例输出

    【讨论】:

      【解决方案2】:

      您无需指定任何自定义 Maven 配置来满足您的需求。

      src/main/resources 中,只需创建一个META-INF 文件夹并将您的文件放在这里。
      这样,您可以在构建的 JAR 的 META-INF 文件夹中找到它们。

      此外,您应该删除您在pom.xml 中添加的&lt;resource&gt; 元素,因为它将默认资源文件夹更改为项目的根目录,而不是默认的src/main/resources

      【讨论】:

      • 但是结果是一样的,对吧?如果我们只是编译它也会复制这些资源文件。我希望它们只复制到 JAR 文件中。
      • 不是真的,因为在 Jar 中,资源不会在 classes/META-INF 中重复。如前所述,它们将仅位于 META-INF 目录中。
      • 嗨@davidxxx。当资源应该转到 META-INF 时,我注意到您的评论,但是是否可以将资源放在 jar 文件的根目录中,在 META-INF 旁边?谢谢。
      • 嗨@Cristian。当然,您可以在 src/main/resources 的项目中存储的所有资源(文件和文件夹)默认位于构建 JAR 的根目录中。
      • @Cristian 您可以使用 Spring Boot 可自动引导 WAR 来完成此操作,但不能使用未设计为具有此布局的 Spring Boot 可自动引导 JAR。您确实会在BOOT-INF\classes 中找到您的资源。问题是你不能轻易改变它,因为这个重新打包是由 Spring Boot 本身执行的。您可以尝试创建一个 Layout 并将其传递给 Spring Boot 的重新打包插件的 layoutFactory 属性,但不能保证。 docs.spring.io/spring-boot/docs/current/maven-plugin/… 反正这个问题很有趣,为什么不在 SO 上问呢?
      【解决方案3】:

      如果你想将文件和目录添加到 META-INF 文件夹,请在 pom.xml 中使用此代码

         <build>
              <finalName>CustomJsfComponents</finalName>
              <resources>
                  <resource>
                      <directory>src/main/resources</directory>
                      <includes>
                          <include>**.xml</include>
                          <include>**resources/**</include>
                      </includes>
                      <targetPath>META-INF</targetPath>
                  </resource>
              </resources>
          </build>
      

      【讨论】:

        猜你喜欢
        • 2013-07-06
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 2015-12-29
        • 2020-11-03
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        相关资源
        最近更新 更多