【问题标题】:maven-dependency-plugin ignores outputDirectory configurationmaven-dependency-plugin 忽略 outputDirectory 配置
【发布时间】:2016-08-07 16:01:30
【问题描述】:

我想用我的主要 java 项目及其所有依赖项创建一个 jar 文件。所以我在 pom 文件中创建了以下插件定义:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <!-- exclude junit, we need runtime dependency only -->
                <includeScope>runtime</includeScope>
                <outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

所以我执行mvn dependency:copy-dependencies,它将所有依赖项复制到target/dependency 而不是dependency-jars 工作正常。有什么想法吗?

【问题讨论】:

    标签: java maven maven-dependency-plugin


    【解决方案1】:

    这很正常:您配置了 maven-dependency-plugin 的特殊执行,名为 copy-dependencies,但是,直接在命令行上调用目标 dependency:copy-dependencies 会创建一个默认执行,这与您配置的不同。因此,您的配置不会被考虑在内。

    在 Maven 中,您可以在 2 个位置配置插件:针对所有执行(在 &lt;plugin&gt; 级别使用 &lt;configuration&gt;)或针对每次执行(在 &lt;execution&gt; 级别使用 &lt;configuration&gt;)。

    有几种方法可以解决您的问题:

    • &lt;configuration&gt; 移到&lt;execution&gt; 之外,使其适用于所有执行。你会:

      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <!-- exclude junit, we need runtime dependency only -->
          <includeScope>runtime</includeScope>
          <outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
        </configuration>
      </plugin>
      

      请注意,这样,插件的所有执行都将使用此配置(除非在特定执行配置中被覆盖)。

    • 在命令行上执行一个特定的执行,即你配置的那个。 This is possible since Maven 3.3.1 你会执行

      mvn dependency:copy-dependencies@copy-dependencies
      

      @copy-dependencies 用于引用您要调用的执行的&lt;id&gt;

    • 将您的执行绑定到 Maven 生命周期的特定阶段,并让它按照生命周期的正常流程执行。在您的配置中,它已经与&lt;phase&gt;package&lt;/phase&gt; 绑定到package 阶段。因此,调用 mvn clean package 将起作用并将您的依赖项复制到配置的位置。

    【讨论】:

    • 这很好用,感谢分享这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多