gpt4 book ai didi

java - Gradle:强制使用另一个操作系统

转载 作者:行者123 更新时间:2023-12-02 10:57:06 24 4
gpt4 key购买 nike

我使用 OperatingSystem.current() 进行日常 gradle 工作。现在,我想为不同的平台组装我的 java 项目,因此我手动更改我的 build.gradle 文件以针对特定操作系统进行构建。

我的问题:有没有办法直接在 gradle 命令行中指定要使用的操作系统(由 OperatingSystem.current() 返回)?如果不是,进行交叉构建的最佳策略是什么?

注意:我依赖于一些使用 OperatingSystem.current() 的库。

最佳答案

我在写这篇文章时感到畏缩,它在很多层面上都是错误的 - 我建议你避免强制 Gradle 认为它在不同的操作系统中。但假设你无法避免它 ->

我完全取决于您使用的 Gradle 版本,我假设您使用的是最新版本(旧版本可能更简单)

OperatingSystem.current()"os.name" 环境变量配合使用,您可以使用 -D 标志非常简单地覆盖该变量在 Gradle 命令上。

但是,这是一个很大的但是,Gradle 不是这里的问题。用于执行构建的底层 JRE 包含操作系统特定的代码 - 请参阅 UNIX 系统上的 UNIXProcess。UNIXProcess 的当前实现在执行验证时会阻止覆盖“os.name” 值。您可以通过在 org.gradle.internal.os 包中创建一个公开包私有(private) OperatingSystem.resetCurrent() 方法的类来绕过这个问题然后强制 OperatingSystem.current() 重新评估,绕过任何真实 JRE 检查。

像这样:

print OperatingSystem.current()
System.setProperty("os.name", <some other OS>)
OperatingSystemWrapper.resetCurrent()
print OperatingSystem.current()
<小时/>

经过对评论的一些额外讨论,现在我明白这里真正的要求是以一种简单的方式对 native 库进行条件依赖,这将允许 OP 删除对 OperatingSyste.current()

取样

apply plugin: "java"

dependencies {
compile "org.lwjgl:lwjgl:3.2.0"
compile "org.lwjgl:lwjgl-platform:3.2.0:natives-windows"
compile "org.lwjgl:lwjgl-platform:3.2.0:natives-linux"
compile "org.lwjgl:lwjgl-platform:3.2.0:natives-osx"
}

可以通过“-P”标志添加条件依赖(请参阅 https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties )

apply plugin: "java"

dependencies {
compile "org.lwjgl:lwjgl:3.2.0"
if (buildos == "windows") {
compile "org.lwjgl:lwjgl-platform:3.2.0:natives-windows"
} else if (buildos == "linux") {
compile "org.lwjgl:lwjgl-platform:3.2.0:natives-linux"
} else if (buildos == "osx") {
compile "org.lwjgl:lwjgl-platform:3.2.0:natives-osx"
}
}



gradle build -Pbuildos=windows

可以使用“-D”标志完成类似的操作,但是您需要使用System.getProperty来访问它

可以通过为每种风格构建自定义任务和配置(从编译/实现继承)而不是依赖 -P 标志来更进一步

关于java - Gradle:强制使用另一个操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636287/

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