自动执行依赖性:Maven中的构建式路径



我实际上是在尝试做到这一点:

http://maven.apache.org/plugins/maven-depperency-plugin/usage.html#the_depperency:build-classpath_mojo

令人惊讶的是,在找到了我想做的事情的明确示例之后。我仍然无法正常工作。

从命令行,我可以运行...mvn -dmdep.outputfile = classpath.txt依赖关系:build -classpath...确实会产生一个名为classpath.txt的文件,并带有我想要的信息。

我希望能够发出诸如" MVN Compile"之类的命令,并使此classPath.txt文件的生产成为该过程的一部分。上面的链接中提供的示例将其与生成源相关联,对我的理解就足够了。

使用下面的POM段执行" MVN Compile"命令时,关于build-classPath目标似乎没有执行。

<build>
<pluginManagement>
  <plugins>      
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
     </plugin>
     <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>2.8</version>
      <executions>
       <execution>
        <id>build-classpath</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>build-classpath</goal>
        </goals>
         <configuration>
            <outputFile>myfile.txt</outputFile>
            <mdep.outputFile>myFile1.txt</mdep.outputFile>
            <ihavenoidea>whatgoeshere</ihavenoidea>
         </configuration>
       </execution>
     </executions>
    </plugin>
  </plugins>
 </pluginManagement>
</build>

这是我最终得到的:

$ mvn compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building someproj 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ someproj ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ someproj ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.600s
[INFO] Finished at: Fri Jan 31 14:05:29 CST 2014
[INFO] Final Memory: 9M/156M
[INFO] ------------------------------------------------------------------------
$ ls 
bin     html        log     pom.xml     resources   sql     src     target      test-output wwwroot

您的插件定义在<pluginManagement>内部,这意味着,当您在POM中声明该插件的"真实"执行,该POM将其作为父级(或此POM本身)将使用该配置。

当必须通过同一全局项目中的多个模块应用多个执行时,使用<pluginManagement>这是一个好主意。

在这里,我会亲自将编译器插件保留在<pluginManagement>中,因为您可能总是希望这样的插件像这样配置,但是我会在<plugins>节内移动dependency-plugin(<pluginManagement>部分外部,是的,是的,可能是混乱的...)

您可能认为<pluginManagement>是一种模板。它经常在父pom中用于定义常见配置。构建中仅包含<build><plugins>中的插件。

也就是说,Maven确实会根据包装类型做一些"魔术"。我在这里回答了一个类似的问题。

最新更新