maven-dependency-plugin忽略outputDirectory配置



我想用我的主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。什么好主意吗?

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

在Maven中,有两个地方可以配置插件:用于所有执行(在<plugin>级别使用<configuration>)或用于每次执行(在<execution>级别使用<configuration>)。

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

  • <configuration>移出<execution>,并将其设置为通用。你应该有:

    <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>
    

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

  • 在命令行上执行一个特定的执行,即您配置的那个。这在Maven 3.3.1中是可能的,您将执行

    mvn dependency:copy-dependencies@copy-dependencies
    

    @copy-dependencies是用来指你想要调用的执行的<id>

  • 将您的执行绑定到Maven生命周期的特定阶段,并让它与生命周期的正常流一起执行。在您的配置中,它已经与<phase>package</phase>绑定到package阶段。因此,调用mvn clean package可以工作,并将依赖项复制到配置的位置。

相关内容

  • 没有找到相关文章

最新更新