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

标签 java maven classpath

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/

相关文章:

java - Signjar 不支持 OSX java 版本 "sigalg"的 "1.6.0_37"属性

java - 在cygwin中将多个jar文件设置为类路径

java - Hibernate-4 显示生成的 SQL 代码

java - 在我的 war 中在运行时获取 maven 部署插件 Artifact 版本

java - 使用 Maven 在 Eclipse 中运行项目时出错 "Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile"

java - 为什么我从 org/jfree/chart 收到 NoClassDefFoundError?

Java 非常不寻常的类路径问题

java - 当我在 statechange 上显示对话框时,JCheckbox 更改状态两次,如何解决?

java - 捕获 Spring 中 PropertyEditors 抛出的 IllegalArgumentException

java - 使用 AsyncTask 从 JSON 中获取数据