maven.plugin.classpath 和 maven.runtime.classpath 有什么区别
What is the difference between maven.plugin.classpath and maven.runtime.classpath
Maven 识别 4 个类路径:
maven.compile.classpath:
类 和编译源代码时需要在类路径中的 jars。所以基本上对于 maven-compiler-plugin
maven.test.classpath: 类 和 jar 在 运行 单元测试或集成测试时需要在类路径上
maven.runtime.classpath:
我知道 maven.runtime.classpath 包含 jars 和 类 maven 本身需要 运行.
maven.plugin.classpath:
我知道当插件 运行 是自己的 JVM
时,这个类路径会传递给 Maven 插件
问题:
- 我说得对吗?
- 插件是编译类路径的超集吗?
- 是否是编译类路径的测试超集?
- 当插件 运行 是它自己的 JVM - 什么是
类路径传递给它?
- 有这方面的文档吗?
实际上,你错了,但我找不到任何明确说明这一点的文档。
这 4 个属性由 maven-antrun-plugin
and are not part of Maven itself. From Referencing the Maven Classpaths:
定义
You can also use these classpath references:
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
本身的依赖。
Maven 识别 4 个类路径:
maven.compile.classpath: 类 和编译源代码时需要在类路径中的 jars。所以基本上对于 maven-compiler-plugin
maven.test.classpath: 类 和 jar 在 运行 单元测试或集成测试时需要在类路径上
maven.runtime.classpath: 我知道 maven.runtime.classpath 包含 jars 和 类 maven 本身需要 运行.
maven.plugin.classpath: 我知道当插件 运行 是自己的 JVM
时,这个类路径会传递给 Maven 插件
问题:
- 我说得对吗?
- 插件是编译类路径的超集吗?
- 是否是编译类路径的测试超集?
- 当插件 运行 是它自己的 JVM - 什么是 类路径传递给它?
- 有这方面的文档吗?
实际上,你错了,但我找不到任何明确说明这一点的文档。
这 4 个属性由 maven-antrun-plugin
and are not part of Maven itself. From Referencing the Maven Classpaths:
You can also use these classpath references:
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
本身的依赖。