pup*_*eno 14 java javafx gradle
我正在使用JavaFX,Gradle,javafx-gradle-plugin构建Java桌面应用程序.此应用程序连接到我也构建的服务器.当我编译发布版本,运行时gradle jfxNative,我希望它与生产服务器通信; 但除此之外,我希望它与localhost交谈.
什么是正确的Java/Gradle处理方式?某种编译配置文件?
您可以使用Gradle的源集:
示例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")
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以为dev和prod版本创建两个配置类:
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在您的情况下.
小智 4
最简单的解决方案:拥有一个包含此类信息的配置文件。您可以将其作为 java 资源编译到应用程序中,也可以将其放置在 jar 文件旁边,以便可以通过文件系统轻松查找它。
使用 gradle,您需要做的就是定义两个具有不同输入属性的构建任务,并使用 groovy 模板将值插入到属性文件中。
src/main/resources 中的 application.properties:
server.address=${serverAddress}
Run Code Online (Sandbox Code Playgroud)
添加到您的 build.gradle
task setProductionServerAddress {
processResources.expand([serverAddress: "https://app.example.com/v1"])
}
jfxJar.dependsOn(setProductionServerAddress)
jfxNative.dependsOn(setProductionServerAddress)
Run Code Online (Sandbox Code Playgroud)
然后在应用程序上:
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"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |