我是一种测试/纠正和旧的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
任务的自定义构建链,则必须调整上述片段。