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

Mar*_*hač 5 java classpath maven

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 时 - 传递给它的类路径是什么?
  • 有这方面的文档吗?

Tun*_*aki 4

事实上,你错了,但我找不到任何明确说明这一点的文档。

这 4 个属性由 Maven 定义maven-antrun-plugin,而不是 Maven 本身的一部分。来自引用 Maven 类路径

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

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

该插件创建这 4 个属性,以便 Ant 任务可以引用它们。如果您查看源代码,您将找到创建这些属性的位置,复制此处以供参考

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 ) );
Run Code Online (Sandbox Code Playgroud)

通过分析这段代码,可以得出这样的结论:

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