将类变量调用到build.properties中



我是一种测试/纠正和旧的gradle项目,可以使用一种工具来构建rpm,该工具将文件导入到服务器而无需手动执行。

但是,该工具需要该专有软件使用的文件,并使用它确实知道需要使用哪些DIR和LIB。在这一点上对于生成rpm并用手工复制文件是必要的因为该软件可能因环境而不同。

oon类有以下变量:

private static final String DB_USER          = "db_user";
private static final String DB_PASSWORD      = "db_password";
private static final String DB_URL           = "db_url";
private static final String W_HOME           = "w_home";
private static final String W_LOGIN          = "w_login";
private static final String W_LOGIN_USERNAME = "username";
private static final String W_LOGIN_PASSWORD = "password";
private static final String W_SERVER_URL     = "w_server_url";

w_home是用于读取软件安装位置的路径,通过在build.gradle中使用该变量。我可以轻松地通过文件夹和文件名并将其放入RPM软件包。

我的问题是否甚至可以调用Java变量或该变量的获取到build.gradle

编辑:添加Gradle任务

task buildRpm(type: Rpm, overwrite: true, dependsOn: build) {
    packageName = applicationName
    release = rpm_release
    arch = NOARCH
    os = LINUX
    epoch = git.head().time
    summary = "Import"
    license = 'Proprietary'
    user User
    permissionGroup Group
    //THIS DIRECTORY SHOULD ALREADY BE PRESENT
    into(Home){
        addParentDirs = false
        fileMode 0644
        dirMode 0755
        directory("${Home}/${ packageName }")
        directory("${Home}/${ packageName }/lib")
        directory("${Home}/${ packageName }/config")
        directory("${Home}/${ packageName }/bin")
        directory("${Home}/${ packageName }/logs", 0777)
        from(jar.outputs.files) {
            into "${ packageName }/lib"
        }
        from(configurations.runtime) {
            into "${ packageName }/lib"
        }
        from('lib') {
            into "${ packageName }/lib"
        }
        from('src/dist/config') {
            exclude 'log4j2.xml'
            into "${ packageName }/config"
        }
        from('src/dist/config/log4j2.xml') {
            into "${ packageName }/config"
            fileType CONFIG | NOREPLACE
        }
        from('out/scripts') {
            into "${ packageName }/bin"
            fileMode 0755
        }
    }
    requires('java', '2000:1.8.0_121', GREATER | EQUAL)
}

如果包含常数的类是您项目的一部分,那么实现目标的一种方法是将输出jar动态加载到rpm生成任务中,然后通过反射提取所需的值:

// Put this in your RPM task
URL[] urls = [new URL("file:///" + jar.archivePath.absolutePath)]
def loader = new URLClassLoader(urls)
// className is the fully qualified name of the configuration class
Class<?> clazz = loader.loadClass(className)
def field = clazz.getDeclaredField("W_HOME")
field.setAccessible(true) // This is needed for private fields
String home = field.get(null)

由于您的班级显然是要在外部使用的常数,因此使它们成为private

当然,如果您有一些不使用标准jar任务的自定义构建链,则必须调整上述片段。

相关内容

最新更新