maven-dependency-plugin忽略outputDirectory配置

时间:2016-08-07 16:01:31

标签: java maven maven-dependency-plugin

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

<!doctype html>
<html lang="en">

<head>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
</head>

<body ng-app="myApp" ng-controller="myCtrl">
  <p ng-repeat="x in dummy">
    <label>
      <input type="radio" value="{{x.value}}" id="{{x.id}}" ng-model="model.Ques[x.id]">{{x.value}}
    </label>
  </p>
  <button ng-click="ok()">Click</button>
</body>

</html>

所以我执行<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。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

在Maven中,有两个地方可以配置插件:要么是所有执行(使用<configuration>级别的<plugin>),要么是每次执行(使用<configuration> { {1}}级别。

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

  • <execution>移到<configuration>之外,并使其适用于所有执行。你会:

    <execution>

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

  • 在命令行上执行特定的执行,即您配置的执行。 This is possible since Maven 3.3.1您将执行

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

    mvn dependency:copy-dependencies@copy-dependencies 用于指代您要调用的执行的@copy-dependencies

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