使用Maven重新编译依赖项 - 可能吗?任何性能提升?

时间:2012-01-15 07:36:40

标签: java maven dependencies compiler-optimization building

我在考虑Maven中的依赖关系。 Maven会下载它们,但是它们编译的JVM的目标版本以及使用什么编译器是未知的。这提出了两个问题:

  • 依赖项重新编译会带来更快的依赖库吗? 我试图搜索这个,但没有找到足够的答案。我发现1.6中存在Split bytecode verification,这是在使用目标1.6进行编译时完成的 还有一个问题Are Java 6's performance improvements in the JDK, JVM, or both?,其中提到较新版本的javac可能会生成更优化的代码。
  • 是否可以使用Maven执行依赖库的重新编译?是否可以配置Maven下载源,将有关1.6目标的信息放入其中并执行 mvn clean install
    我知道Maven Dependency plugin dependency:sources 目标。这可以用于源代码下载 还有Maven Replacer Plugin允许替换文件中的文本。正如其Issue 58中所述,已经实现了XPath支持 是否可以使用这些插件实现依赖关系以及依赖关系来执行它?我不确定如何在依赖项上执行它 - 可能使用Maven Replacer插件将配置注入到解压缩的依赖项pom.xml中? 或者是否有更简单的方法在用户的 settings.xml 中使用构建配置文件配置目标java版本,该版本优先于项目设置,因此避免 pom.xml 修改?

2 个答案:

答案 0 :(得分:3)

javac旁边没有任何优化,而且它们从最初的那些时间就已存在。 (甚至可以被认为是历史性的)如果你有Java 1.0构建的代码,你可能会发现一个改进,但是过去几十年的任何事情都可能在字节代码中与今天一样最佳。

大多数优化都是在JVM本身完成的,您应该会发现Java 6更新30的运行速度比Java 6更新0快,即使是完全相同的代码也是如此。

答案 1 :(得分:1)

让我们想一想Maven依赖是什么。从最普遍的意义上讲,它是由其他人开发的软件,它的生命周期是:

  • 包装在档案中,
  • 存在于存储库中
  • 在版本描述符(组,工件,版本)下。

这都是Maven的保证。请注意,它甚至没有说它是Java(可能是资源,或者是本机库)。不多。要求自动重新编译依赖项的能力太小了。