gpt4 book ai didi

java - 使用JDK8编译目标JRE7

转载 作者:行者123 更新时间:2023-11-30 03:50:24 25 4
gpt4 key购买 nike

直到今天我的印象是-target编译时的参数足以确保我的应用程序即使使用 JDK8 javac 编译,也能在 JRE7 上执行。

当我了解到 Sun/Oracle 如何将方法签名从一个版本更改为另一个版本时,我很快就变得更加明智。

我的目标是 - 使用 JDK8 工具链 - 创建一个可以使用 JRE7 和 JRE8 执行的二进制文件。我工作的构建农场是多操作系统的,这意味着有些是 Windows,有些是 Solaris,等等。我无法事先预测我的应用程序将在哪里构建。

我了解推荐的解决方案是使用 -Xbootclasspath在编译步骤上。我正在使用 Maven,所以我需要这样的东西:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<bootclasspath>XXXX</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>

我不明白的是如何设置XXXX这样我的应用程序就可以在任何地方构建,而不仅仅是在我自己的工作站上。本质上,如果您愿意,我希望 XXXX 成为一个 Artifact 或一个依赖项。我无法控制目标构建机器,但我可以将第三方 Artifact 上传到我们的公司 Maven 存储库。如何解决这个问题?

我看到的另一个问题是 XXXX 实际上是一个列表。它不是一个 jar 。 (据我所知,为了安全起见,它实际上是来自目标 JRE 的 sun.boot.class.path 的值,这意味着它不仅仅是 rt.jar ,正如一些文献似乎暗示的那样)。考虑到“;”,如何设置 XXXX 以使其独立于操作系统在 Windows 上用作列表项分隔符,而“:”在 Unix/Linux 上使用。怎么解决?

最佳答案

您可以尝试配置文件

<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<bootclasspath>xxx</bootclasspath>
</properties>
</profile>
<profile>
<id>win</id>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
<properties>
<bootclasspath>yyy</bootclasspath>
</properties>
</profile>
</profiles>

关于java - 使用JDK8编译目标JRE7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24607570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com