相关疑难解决方法(0)

哪个JDK的发行版可以运行`javac -source 1.6 -target 1.5`?

注:请不要上交叉编译的所有危险评.谢谢.


我有一种情况,我们需要为Java 5 JVM编译Java 6源代码(以确保JAX-WS的使用是正确的).以前我们用ant ant脚本(显然可以)这样做了,但是在迁移到Maven之后我们发现它最终以javac抱怨:

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

是否有任何对Linux(Ubuntu的11.10,86),其中使用javac可以做到这一点的Java分配?


编辑:它似乎没有,因为限制在javac是相同的.解决方案(这使得需要消失)是从默认的javac编译器改为maven-compiler-plugin中的eclipse编译器.


编辑:我发现Eclipse编译器为javadoc实用程序不同意的匿名内部类生成字节代码.我正在为此问题准备一份错误报告.

java linux ubuntu javac

3
推荐指数
1
解决办法
5550
查看次数

对Java 5代码中实现的接口方法的@Override注释没有给出编译错误

POM包含(如/sf/answers/1567929891/中所述):

<profile>
  <id>compileWithJava5</id>
  <!--
    NOTE
    Make sure to set the environment variable JAVA5_HOME
    to your JDK 1.5 HOME when using this profile.
  -->
  <properties>
    <java.5.home>${env.JAVA5_HOME}</java.5.home>
    <java.5.libs>${java.5.home}/jre/lib</java.5.libs>
    <java.5.bootclasspath>${java.5.libs}/rt.jar${path.separator}${java.5.libs}/jce.jar</java.5.bootclasspath>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <compilerArguments>
            <bootclasspath>${java.5.bootclasspath}</bootclasspath>
          </compilerArguments>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>
Run Code Online (Sandbox Code Playgroud)

$JAVA5_HOME 设置:

• echo $JAVA5_HOME
/usr/lib/jvm/jdk1.5.0_22
Run Code Online (Sandbox Code Playgroud)

据我所知,Java + Maven的神奇之处在于,它应该是maven-compiler-plugin指示JDK 1.8伪装成JDK 1.5并使用Java 5引导类路径的有效咒语.


根据为什么javac在@Override注释上失败,JDK 1.5将不允许接口的已 …

java jdk1.5 cross-compiling maven

3
推荐指数
1
解决办法
743
查看次数

使用本地类型推断的程序是否适用于较低的Java版本?

Java 10引入了本地类型推理,这非常酷:

var list = new ArrayList<String>(); // Compiles fine
Run Code Online (Sandbox Code Playgroud)

但是,似乎人们不愿意在新版本发布的那一天(周,月,年)更新他们的Java版本.

这意味着我需要等到Java 8的EOL才可以使用,List.of(1, 2, 3)如果想要支持使用旧Java版本的大多数用户.

另一方面,当编译为字节码时,可能会推断出本地类型推断,因此可能使用它的程序可能会在较旧的Java版本(9或8)上运行.另一方面,Java似乎喜欢在运行时进行优化,这可能意味着类型推断需要JRE版本10.

有人试过这个吗?使用类型推断的程序是否在较旧的Java版本上运行?

感谢您的意见.

java type-inference java-10

1
推荐指数
1
解决办法
149
查看次数

标签 统计

java ×3

cross-compiling ×1

java-10 ×1

javac ×1

jdk1.5 ×1

linux ×1

maven ×1

type-inference ×1

ubuntu ×1