相关疑难解决方法(0)

用Java 8编写的程序可以在Java 7上运行吗?

我有点困惑.

  1. Oracle称Java 8与Java 7高度兼容(向后).但是,Java 8程序可以在Java 7上成功运行(SE/EE)的可能性有多大?

  2. 如果第一点是真的,Java 8应用程序将在Java 7服务器支持上部署和执行?例如,Tomcat 8还是WildFly?

java backwards-compatibility java-server java-8

50
推荐指数
3
解决办法
5万
查看次数

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

注意:这似乎是"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>
Run Code Online (Sandbox Code Playgroud)

它可以在Eclipse 3.7中使用Maven支持按预期工作.不幸的是,直接从命令行运行Maven给了我

javac: source release 1.6 requires target release 1.6
Run Code Online (Sandbox Code Playgroud)

与生成的相同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:~$
Run Code Online (Sandbox Code Playgroud)

官方Oracle Java 7 JDK for Windows显示了相同的行为.

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

如何在仍然与Eclipse Maven插件兼容的同时获得我想要的内容?

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


编辑:事实证明maven-compiler-plugin可以被告知使用另一个编译器,Eclipse编译器可以这样做:

        <plugin>
            <!-- Using the eclipse compiler allows …
Run Code Online (Sandbox Code Playgroud)

java javac maven

26
推荐指数
2
解决办法
5万
查看次数

javac源和目标选项

我已经看到了JDK的发行版可以运行`javac -source 1.6 -target 1.5`中讨论的编译选项.我理解源和目标的各个选项.我不明白为什么源版本高于目标版本.编译旧目标的代码是有道理的.但在这种情况下,为什么我们不使用我们希望能够运行的最老目标的-source

java javac

26
推荐指数
2
解决办法
5万
查看次数

你能用Java 8编译一个类,然后在Java 7中使用它吗?

你能用Java 8编译一个类,然后在Java 7中使用它吗?

我想用一个简单的接口(Java 7兼容)编写一个实用程序JAR,但是在里面使用lambdas.然后我想在一些必须用JDK 7编译的代码中使用该实用程序.

可能吗?


正如你所看到的,有一些相互矛盾的答案......所以,真相是什么?;-)

java java-8

21
推荐指数
2
解决办法
2万
查看次数

如何用Java 11生成代码,但要针对Java 8及更高版本?

我正在开发一个小型库,出于明显的原因,我想使用所有Java 11功能(我现在猜不到的模块除外)来生成代码,但是我希望该库与Java 8及更高版本兼容。

当我尝试这个:

javac -source 11 -target 1.8 App.java
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

warning: source release 11 requires target release 11
Run Code Online (Sandbox Code Playgroud)

...当我查看字节码时,我看到该类的版本为0x37(Java 11):

$ xxd App.class
00000000: cafe babe 0000 0037 ...
Run Code Online (Sandbox Code Playgroud)

Java 8无法加载它:

Exception in thread "main" java.lang.UnsupportedClassVersionError: App has been
    compiled by a more recent version of the Java Runtime (class file version 55.0),
    this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at …
Run Code Online (Sandbox Code Playgroud)

java javac cross-compiling java-11

15
推荐指数
5
解决办法
4880
查看次数