在 Java 应用程序中拥有用于开发和发布的各种 URL 端点的正确方法是什么?
我正在构建一个Java桌面应用程序,使用JavaFX,Gradle,javafx-gradle-plugin。此应用程序连接到我也构建的服务器。当我编译一个发布版本,运行时,我希望它与生产服务器通信;但除此之外,我希望它与本地主机交谈。gradle jfxNative
Java/Gradle 处理这个问题的正确方法是什么?某种编译配置文件?
我正在构建一个Java桌面应用程序,使用JavaFX,Gradle,javafx-gradle-plugin。此应用程序连接到我也构建的服务器。当我编译一个发布版本,运行时,我希望它与生产服务器通信;但除此之外,我希望它与本地主机交谈。gradle jfxNative
Java/Gradle 处理这个问题的正确方法是什么?某种编译配置文件?
您可以使用 Gradle 的源代码集来实现以下目的:
Sample build.gradle:
apply plugin: 'java'
sourceSets {
prod {
java {
srcDirs = ['src/main/java', 'src/prod/java']
}
}
dev {
java {
srcDirs = ['src/main/java', 'src/dev/java']
}
}
}
task devJar(type: Jar) {
from sourceSets.dev.output
manifest {
attributes("Main-Class": "MyPackage.MyClass")
}
}
task prodJar(type: Jar) {
from sourceSets.prod.output
manifest {
attributes("Main-Class": "MyPackage.MyClass")
}
}
现在,您可以为开发和生产版本创建两个配置类:src/dev/java/MyPackage/Configuration.java
src/prod/java/MyPackage/Configuration.java
所有通用代码都将在主源代码集中:src/main/java/MyPackage/MyClass.java
MyClass可以从配置类中获取一些值(例如Configuration.getBaseUrl()
)
运行 /构建其中一个变体。gradle devJar
gradle prodJar
注意:您可能需要扩展/而不是在您的情况下。jfxNative
jfxJar
Jar
最简单的解决方案:拥有一个包含此类信息的配置文件。您可以将其作为java资源编译到应用程序中,也可以将其放在jar文件旁边,以便可以通过文件系统轻松查找它。
使用 gradle,您需要做的就是定义两个具有不同输入属性的构建任务,并使用时髦的模板将值插入到属性文件中。
src/main/resources 中的 application.properties:
server.address=${serverAddress}
添加到您的 build.gradle
task setProductionServerAddress {
processResources.expand([serverAddress: "https://app.example.com/v1"])
}
jfxJar.dependsOn(setProductionServerAddress)
jfxNative.dependsOn(setProductionServerAddress)
然后在应用程序上:
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/application.properties"));
if (properties.getProperty("server.address").equals("${serverAddress}")) {
setUrl("http://localhost:8080/v1");
} else {
setUrl(properties.getProperty("server.address"));
}