【问题标题】:How do I add a file to the artifact (jar or war) created by maven?如何将文件添加到由 maven 创建的工件(jar 或 war)中?
【发布时间】:2017-10-02 11:59:13
【问题描述】:

我有一个 antrun 任务(目标 run 在阶段 prepare-package)创建一个文件并将其保存在 /target/foo.bar 中。如何将它添加到 maven 创建的工件中(取决于模块,它可能是 jarwar 文件)?

我已经尝试过使用资源、builder-helper 插件和 jar 插件 - 不走运:

<resources>
  <resource>
    <directory>target</directory>
    <includes>
      <include>**/foo.bar</include>
    </includes>
  </resource>
</resources>

这似乎没有任何作用。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>3.0.0</version>
  <executions>
    <execution>
      <id>attach-artifacts</id>
      <phase>package</phase>
      <goals>
        <goal>attach-artifact</goal>
      </goals>
      <configuration>
        <artifacts>
          <artifact>
            <file>${project.build.directory}/foo.bar</file>
            <type>bar</type>
          </artifact>
       </artifacts>
     </configuration>
   </execution>
 </executions>
</plugin>

根据调试输出,这似乎在 repo 中安装了一些额外的东西,但没有将 foo.bar 添加到人工制品中。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.0.2</version>
  <configuration>
    <includes>
       <include>../foo.bar</include>
    </includes>
  </configuration>
</plugin>

也没有明显的效果。 :(

(我假设this 可能适用于war 文件,但如果可能的话,我更喜欢为两种工件类型执行此操作的一种方法——另外,我真的需要这种方法适用于jars,太……)

有没有办法做我想做的事?
(我不想先将我的文件保存在 src/main/resources 中;我认为打包过程会在将文件放在构建目录之后从构建目录中提取文件,但我想我误解了一些东西......)

【问题讨论】:

  • 你为什么使用antrun task?不使用Maven?你能解释一下你的 antrun 任务在做什么吗?为什么要创建什么样的文件?
  • 您期待使用maven-resource-plugin吗?
  • @nullpointer 我认为这就是我指定resources时使用的?而且它不起作用,因为它只应该将文件复制到target 目录,而不是实际打包它们:“将主源代码的资源复制到主输出目录。始终使用 project.build.resources元素来指​​定要复制的资源。”
  • @khmarbaise 我用它调用mvn dependency:resolve,以获取带有版本号而不是版本范围的依赖项列表。如果有更好的方法可以做到这一点,我会很高兴听到它。但即便如此,我仍然很想知道是否/如何将随机文件添加到 maven 为我生成的工件中。 :)
  • 看看这里:github.com/khmarbaise/add-dependency-plugin/blob/master/pom.xml(将输出添加到结果 jar 文件中)。也应该适用于战争文件...

标签: maven


【解决方案1】:

我已将文件保存到 project.build.directory。将其更改为 project.build.outputDirectory 意味着 jar 插件正在使用它,而不需要任何其他插件。不幸的是,这并没有解决war 问题... :(

【讨论】:

    【解决方案2】:

    我遇到了类似的问题并将生成的工件存储在

    target/${project.name}-${project.version}/foo.war
    

    更准确地说,我使用 ant 目标从目录创建了战争

    <war warfile="target/${project.name}-${project.version}/foo.war" basedir="somedir" />
    

    然后它被正确添加到周围的耳朵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2011-03-16
      • 2014-07-22
      相关资源
      最近更新 更多