maven.plugin.classpath和maven.runtime.classpath之间有什么区别

时间:2016-01-20 14:09:10

标签: java maven classpath

Maven识别4个类路径:

  • maven.compile.classpath: 编译源代码时需要在类路径上的类和jar。所以基本上对于maven-compiler-plugin

  • maven.test.classpath:运行单元测试或集成测试时需要在类路径上的类和jar

  • maven.runtime.classpath: 我知道maven.runtime.classpath包含了maven本身需要运行的jar和类。

  • maven.plugin.classpath: 我知道当插件运行它自己的JVM时,这个类路径会传递给maven插件

问题:

  • 我是对的吗?
  • 是编译类路径的插件超集吗?
  • 是编译类路径的测试超集吗?
  • 当插件运行它自己的JVM时 - 它是什么 classpath传递给它?
  • 有没有关于此的文件?

1 个答案:

答案 0 :(得分:2)

实际上,你错了,但我找不到明确说明这一点的文件。

这4个属性由maven-antrun-plugin定义,不属于Maven本身。来自Referencing the Maven Classpaths

  

您也可以使用这些类路径引用:

     
      
  • maven.compile.classpath
  •   
  • maven.runtime.classpath
  •   
  • maven.test.classpath
  •   
  • maven.plugin.classpath
  •   

此插件创建这4个属性,以便Ant任务可以引用它们。如果您查看at the source code,您可以找到这些属性的创建位置,在此处复制以供参考

Path p = new Path( antProject );
p.setPath( StringUtils.join( mavenProject.getCompileClasspathElements().iterator(), File.pathSeparator ) );

/* maven.dependency.classpath it's deprecated as it's equal to maven.compile.classpath */
antProject.addReference( "maven.dependency.classpath", p );
antProject.addReference( "maven.compile.classpath", p );

p = new Path( antProject );
p.setPath( StringUtils.join( mavenProject.getRuntimeClasspathElements().iterator(), File.pathSeparator ) );
antProject.addReference( "maven.runtime.classpath", p );

p = new Path( antProject );
p.setPath( StringUtils.join( mavenProject.getTestClasspathElements().iterator(), File.pathSeparator) );
antProject.addReference( "maven.test.classpath", p );

/* set maven.plugin.classpath with plugin dependencies */
antProject.addReference( "maven.plugin.classpath", getPathFromArtifacts( pluginArtifacts, antProject ) );

通过分析此代码,可以得出结论:

  • maven.compile.classpath对应于范围compile的类路径元素。
  • maven.runtime.classpath对应于范围runtime的类路径元素。
  • maven.test.classpath对应于范围test的类路径元素。
  • maven.plugin.classpath对应maven-antrun-plugin本身的依赖关系。