通过Maven构建具有不同JDK版本的JAR

时间:2012-06-26 15:13:14

标签: maven java

我们目前正忙于升级到Java 1.7。不幸的是,随着这些事情的发展,许多应用程序无法在1.7下编译并中断(即使将覆盖标志传递给1.7)。计划是尽快重新考虑这些因素。

我想以这样的方式配置Maven,根据POM中的某些属性可以使用不同的JDK。我跟着http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html跟着这封信,但不管我做什么,maven都会忽略POM中指定的java。

POM有以下条目:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <fork>true</fork>
                <source>1.6</source>
                <target>1.6</target>
                <compiler-version>1.6</compiler-version>
                <executable>/usr/lib/jvm/java-6-openjdk/bin/javac</executable> 
                <debug>true</debug>
                <verbose>true</verbose>
            </configuration>
        </plugin>
...

此外,我没有得到'详细'标志的输出 - 我觉得很奇怪。也许以上完全被忽略了?

编辑:我知道它不起作用,因为检查META-INF / MANIFEST.MF文件会显示不正确的java版本。使用的版本与当前路径中的javac相对应。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: jaco
Build-Jdk: 1.7.0_147-icedtea
Implementation-Title: xxx
Implementation-Vendor: xxx
Implementation-Version: 1.3.7
Specification-Title: xxx
Specification-Vendor: xxx
Specification-Version: 1.3.7
编辑:其他相当有趣的东西。如果我故意破坏文件引用,我得到:

[INFO] Compilation failure
Failure executing javac,  but could not parse the error:
/bin/sh: /usr/lib/jvm/java-6-openjdk: Permission denied

编辑:我怀疑问题在于构建清单文件的组件。如果我在我的机器上打破java 7(即将javac重命名为javac.pleasegoaway),它会编译!!但是,清单文件仍会报告版本1.7。现在这已经过去了,并且变得很搞笑。

非常感谢一些帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

编译和jaring是两个独立的操作。更改编译器路径时的编译错误表明编译正确发生。很可能maven jar插件使用java7 jar工具来创建jar文件。