Maven 识别 4 个类路径:
maven.compile.classpath: 编译源代码时需要在类路径中的类和 jar。所以基本上对于 maven-compiler-plugin
maven.test.classpath:运行单元测试或集成测试时需要在类路径上的类和 jar
maven.runtime.classpath: 我了解到 maven.runtime.classpath 包含 jar 和 maven 本身需要运行的类。
maven.plugin.classpath: 我知道当插件运行它自己的 JVM 时,这个类路径被传递给 maven 插件
问题:
- 我说得对吗?
- 插件是编译类路径的超集吗?
- 是编译类路径的测试超集吗?
- 当插件运行它自己的 JVM - 什么是 类路径传递给它?
- 有这方面的文档吗?
最佳答案
实际上,你错了,但我找不到任何明确说明这一点的文档。
这 4 个属性由 maven-antrun-plugin
定义并且不是 Maven 本身的一部分。来自 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
本身的依赖。
关于java - maven.plugin.classpath 和 maven.runtime.classpath 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902288/