如何使用Gradle应用程序插件传递对分发主目录的引用? - java

我正在使用Gradle应用程序插件,并且我想创建一个包含应用主文件夹内 conf 目录的发行版。该目录应包含几个配置文件。例如java.util.logging属性,等等。为了指向我的配置文件,我应该将jvm属性-Djava.util.logging.config=...传递给JUL,在这里我需要对应用程序安装目录的引用。似乎脚本将此路径设置为 APP_HOME 变量。但是有一个问题:我无法将$APP_HOME之类的东西传递给defaultJvmOpts属性,因为有两种脚本(win和nix),而且美元符号是无条件转义的。

那么,有什么方法可以将对应用程序主目录的引用作为虚拟机参数传递?

参考方案

卢克·戴利(Luke Daley)在Gradle论坛上发布了该问题的答案:
http://forums.gradle.org/gradle/topics/how_to_pass_a_reference_to_distribution_home_directory_using_application_plugin:

您将不得不增加启动脚本。

这里有一个示例:https://github.com/ratpack/ratpack/blob/master/ratpack-gradle/src/main/groovy/ratpack/gradle/RatpackPlugin.groovy#L93

感谢他的帮助。

因此,我在build.gradle的末尾添加了以下代码:

CreateStartScripts startScripts = project.startScripts
startScripts.with {
    doLast {
        unixScript.text = unixScript.text.replaceFirst('(?<=DEFAULT_JVM_OPTS=)((\'|\")(.*)(\'|"))(?=\n)',
                '\'$3 "-Dtcproxy.config.url=file:\\$APP_HOME/conf/proxy.properties"\'')
        windowsScript.text = windowsScript.text.replaceFirst('(?<=DEFAULT_JVM_OPTS=)(.*)(?=\r\n)',
                '$1 "-Dtcproxy.config.url=file:%~dp0../conf/proxy.properties"')
    }
}

而且有效!希望以后将此类功能添加到插件中。

45码

Gradle:如何使用并行项目配置多项目设置 - java

我们有一个像这样的旧项目:. ├── customizationProject │   ├── ejb │   └── services ├── projectA │   ├── ejb │   └── shared ├── projectB │   └── ejb └── projectC ├── ejb └── services 这个想法是,custom…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

gradle ignoreFailures测试属性 - java

我的build.gradle文件如下所示:apply plugin: "java" ... test { ... ignoreFailures = "$ignoreFailureProp" } 和一个gradle.properties与ignoreFailureProp=false 当执行gradle clean bu…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …