【问题标题】:maven-jar-plugin does not include .gitignore filemaven-jar-plugin 不包含 .gitignore 文件
【发布时间】:2019-08-26 03:21:14
【问题描述】:

我尝试使用 maven 将应用程序打包到 jar 文件中。不知何故,除了.gitignore 文件之外的所有文件都被添加到 jar 中。

为什么会跳过这个文件,如何禁用它?

即使我尝试像下面那样包含它,也会忽略包含并且 jar 文件仍然为空。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <includes>
      <include>**/.gitignore</include>
    </includes>
  </configuration>
</plugin>
  • maven-jar-plugin 版本:3.1.0
  • maven 版本:3.5.2

【问题讨论】:

  • 为什么要将 .gitignore 包含到 jar 中?对java没用,jar里面对git也没用。
  • 该 jar 用作容器,将开发就绪的示例应用程序打包到现有工作流中。
  • 从我的角度来看,您最好为此使用 zip 存档。
  • 但我猜你的 .gitignore 也没有在目标目录中找到 - 对吧?这意味着您需要通过资源插件将其复制到那里 - 否则 jar 插件找不到它。
  • 我已经告诉资源插件通过addDefaultExcludes 将.gitignore 文件复制到目标。这是有效的。但是 maven-jar-plugin 仍然忽略它。

标签: maven gitignore maven-jar-plugin


【解决方案1】:

target/classes 文件夹中的 .metadata 文件夹也有同样的问题。 .metadata 文件夹不包含在 jar 存档中。 对我来说,它不适用于maven-jar-plugin:2.4 和更高版本。使用 2.3 版它可以工作。

我提交了这个问题:https://issues.apache.org/jira/browse/MJAR-265

【讨论】:

    【解决方案2】:

    第一件事是使用 jar 文件的示例项目是惊人的。我永远不会期望在.jar 文件中有示例项目。 jar 文件的目的是不同的。我建议使用更合适的东西,如.zip.tar.gz 等。(这可以通过maven-assembly-plugin 来实现)这样可以防止意外使用。

    除了整个问题之外,还基于资源的定义,这些资源通常从src/main/resources复制到target/classes目录。这是由maven-resources-plugin 完成的。

    maven-resources-plugin 插件有某种配置,排除了一些包含.gitignorefiles which are usually not copied。因此,这意味着仅将 .gitignore 文件放入 src/main/resources 不会产生预期的结果,也不会在这里使用 &lt;includes&gt;..&lt;/includes&gt; 配置。

    这意味着您需要通过pluginManagement 部分更改 maven-resources-plugin 的默认配置,如下所示:

      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.1.0</version>
              <configuration>
                <addDefaultExcludes>false</addDefaultExcludes>
              </configuration>
            </plugin>
    

    .gitignore 文件将被复制并打包到生成的 jar 文件中(我不建议这样做。)

    【讨论】:

    • 没错。我已经设法将带有资源插件的文件复制到target/classes。但是maven-jar-plugin > 2.4 也会跳过.gitignore 文件。
    【解决方案3】:

    我用src/main/resources/.gitignore 尝试了这个,它与默认的maven-jar-plugin:2.4 一起工作,即.gitignore 被打包到JAR 中。

    然后我使用了你提到的maven-jar-plugin:3.1.0,它确实没有工作,正如你所描述的那样。

    原来从 v2.5 开始就不行了。

    【讨论】:

    • 这和我发现的一样。所以也许没有机会用 maven-jar-plugin >= 3
    猜你喜欢
    • 2011-01-27
    • 2016-01-10
    • 2018-11-26
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多