在Java应用程序中为dev和release提供各种URL端点的正确方法是什么?

pup*_*eno 14 java javafx gradle

我正在使用JavaFX,Gradle,javafx-gradle-plugin构建Java桌面应用程序.此应用程序连接到我也构建的服务器.当我编译发布版本,运行时gradle jfxNative,我希望它与生产服务器通信; 但除此之外,我希望它与localhost交谈.

什么是正确的Java/Gradle处理方式?某种编译配置文件?

dev*_*max 6

您可以使用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 次

最近记录:

8 年,8 月 前