当前位置: 首页 > 面试题库 >

Maven:Javac:源版本1.6需要目标版本1.6

濮阳鸿卓
2023-03-14
问题内容

注意:这似乎是“ javac”程序中的限制。

我有需要为Java 5 JVM构建的Java 6代码。我以前使用javac
ant目标(同时使用JDK编译器和ecj)的工作使我相信,这仅仅是为javac设置源和目标的问题。因此,此pom.xml片段:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.5</target>
    </configuration>
</plugin>

在具有Maven支持的Eclipse 3.7中可以正常工作。不幸的是,直接从命令行运行Maven给了我

javac: source release 1.6 requires target release 1.6

与产生的相同javac -source 1.6 -target 1.5。澄清一下,这是Ubuntu的官方OpenJDK 6

x@JENKINS:~$ javac -version
javac 1.6.0_20
x@JENKINS:~$ javac -source 1.6 -target 1.5
javac: source release 1.6 requires target release 1.6
x@JENKINS:~$

Windows的官方Oracle Java 7 JDK显示相同的行为。

注意:我不想针对Java 5库或任何东西进行构建。只是活动的javac会生成Java 5 兼容的 字节码。

如何在仍然与Eclipse Maven插件兼容的同时获得所需的东西?

(编辑:除了@Override之外,我还想在使用Java 6时针对Java 6中的JAX-WS库进行编译,但仍生成Java 5字节代码-
然后我可以在部署时在Web容器中有意添加JAX-WS库Java 5安装)

编辑:事实证明可以告诉maven-compiler-plugin使用另一个编译器,而Eclipse编译器可以做到这一点:

        <plugin>
            <!-- Using the eclipse compiler allows for different source and target, 
                which is a good thing (outweighing that this is a rarely used combination, 
                and most people use javac) This should also allow us to run maven builds 
                on a JRE and not a JDK. -->

            <!-- Note that initial experiments with an earlier version of maven-compiler-plugin 
                showed that the eclipse compiler bundled with that gave incorrect lines in 
                the debug information. By using a newer version of the plexus-compiler-eclipse 
                plugin this is hopefully less of an issue. If not we must also bundle a newer 
                version of the eclipse compiler itself. -->

            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.6</source>
                <target>1.5</target>
                <debug>true</debug>
                <optimize>false</optimize>
                <fork>true</fork>
                <compilerId>eclipse</compilerId>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.plexus</groupId>
                    <artifactId>plexus-compiler-eclipse</artifactId>
                    <version>2.1</version>
                </dependency>
            </dependencies>
        </plugin>

将该类编译为Java 1.5字节码而没有任何抱怨。Eclipse Java EE 4.2.2的m2e也支持“开箱即用”。

编辑:我发现所有 Javadoc 工具都不喜欢Eclipse编译器的输出。

EDIT 2015-06-28:我最近做了一个快速测试,最新的ecj(对应于Eclipse 4.4)与javadoc配合良好。


问题答案:

限制在javac中。解决的办法是告诉Maven使用另一个编译器。有关详细信息,请参阅问题。



 类似资料:
  • 在使用IntelliJ IDEA运行JUnit测试时,我得到 我该如何纠正这一点呢? 使用SDK 1.7 模块语言级别为1.7 Maven build工作良好。(这就是为什么我在IDEA configuration issue中相信这一点)

  • 我正在使用intellij创建sbt跨编译平台项目,使用以下平台JVM、JS、NativeWin、NativeUbuntu、Android和共享scala代码。我的项目需要Java8,但似乎Android不适合Java8版本,因为我在sbt文件中为Android模块指定了1.7版本,如下所示: Android模块文件 项目设置:

  • 所以我更改了我的依赖项,如下所示: 但我不知道从哪里可以把1.6级改成1.8级... 当我编译应用程序时,我遇到了这个错误: 提前致谢:)

  • 我有这个错误:

  • 如何解决那个错误?? 我的生成分级文件是

  • 我正在尝试使用最新的Gradle版本(2.0),但我不断得到这个消息,当点击Gradle构建在终端。为什么它要1.10版本?我对Gradle是个新手,所以我想好好想想。 需要Gradle版本1.10。当前版本为2.0 最后一件事是在中,我选择了“使用可定制的gradle包装器” 设置为C:\Program Files(x86)\gradle\gradle-2.0 build.gradle文件: 更