当前位置: 首页 > 知识库问答 >
问题:

通过Gradle运行Java类时传递系统属性和参数的问题

姚和顺
2023-03-14
    null

我有两个问题:

(1)我无法让Java可执行文件读取系统属性

我是否这样做:

apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
gradle run -Dmyproperty=myvalue
task execute (type:JavaExec) {
    main = "com.mycompany.MyMain"
    classpath = sourceSets.main.runtimeClasspath 
}
gradle execute -Dmyproperty=myvalue

我如何通过这些变量?另外,使用apply plugin:'application'还是task execute(type:javaexec)更好?

共有1个答案

虞唯
2023-03-14

想通了。主要问题是,当Gradle分叉一个新的Java进程时,它不会自动地将环境变量值传递到新的环境中。必须通过任务或插件的SystemProperties属性显式地传递这些变量。

另一个问题是理解如何传递命令行arg;这些是通过任务或插件上的args属性实现的。与Mavenexec-maven-plugin一样,它们应该通过另一个系统属性在命令行中传入,作为一个用空格分隔的列表,然后在设置args之前需要使用split(),后者接受list对象。我将属性命名为exec.args,这是旧的Maven名称。

似乎javaexec和应用程序插件方法都是有效的。如果想使用应用程序插件的一些其他特性(自动组合发行版等),则可能会倾向于应用程序插件方法

gradle execute -Dmyvariable=myvalue -Dexec.args="arg1 arg2 arg3"
task execute (type:JavaExec) {

    main = "com.myCompany.MyMain"
    classpath = sourceSets.main.runtimeClasspath 

    /* Can pass all the properties: */
    systemProperties System.getProperties()

    /* Or just each by name: */
    systemProperty "myvariable", System.getProperty("myvariable")

    /* Need to split the space-delimited value in the exec.args */
    args System.getProperty("exec.args", "").split()    
}
gradle run -Dmyvariable=myvalue -Dexec.args="arg1 arg2 arg3"
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
run {    
    /* Can pass all the properties: */
    systemProperties System.getProperties()

    /* Or just each by name: */
    systemProperty "myvariable", System.getProperty("myvariable")

    /* Need to split the space-delimited value in the exec.args */
    args System.getProperty("exec.args", "").split()    
}
 类似资料:
  • 问题内容: 我有一个运行的现有jar文件。它是Selenium RC服务器。我希望能够更改JVM httpProxy.host/port/etc系统值。一方面,我可以修改源代码并添加此功能。这将需要一些时间。还有另一种可能的方法吗?就像我自己的JAR(将设置这些JVM属性)在同一个JVM实例中调用selenium- rc(这样,它便能够修改其JVM变量的值)? 问题答案: 您可以使用以下命令在命令

  • 我正在尝试通过java运行jmeter。这些例子来自https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui 我上传了jmx文件,如示例中所述。 在jmx文件中,我有属性。指定的属性,如${uuuu属性(0个用户,0)} 我设法通过命令行使用-J参数上传了这个属性。 如何通过java指定参数

  • 问题内容: 我试图制作一个程序,当类名和方法名作为String参数传递给调用者时,该程序执行特定的方法。考虑下面的代码。我有一个CarBean类: 现在,我想通过以下方法运行此文件: runTheMethod的实现如下所示: 我可以使用类名来获取对象。现在,我需要将其强制转换为CarBean对象,然后可以运行其方法。因此,想知道如何在运行时将其强制转换为类名对于每个调用都会有所不同。另外,在尝试调

  • 问题内容: 我有以下问题。我想从命令行运行一个文件。接受参数。 如何从命令行执行此操作? 我试图找到一个例子,但没有成功。有人可以帮我举一个例子吗? 我看了这里,但不太明白该怎么办。 另外, 如何从与Main.java文件夹不同的文件夹中执行该命令? 例如位于。我应该放什么 问题答案: 您可以运行:。 这会将参数 arg1 传递给您的程序。 您应该指定完全合格的主类,例如,在包测试中的Main.j

  • 问题内容: 我正在使用PhantomJS page.evaluate()进行抓取。我的问题是我传递到Webkit页面的代码是沙盒化的,因此无法访问我的主要幻象脚本的变量。这使得很难使抓取代码通用。 如何将参数推入页面? 问题答案: 我遇到了确切的问题。可以使用一些技巧,因为它也可以接受字符串。 有几种方法可以执行此操作,但是我使用了一个称为的包装器,该包装器接受其他参数以传递给必须在Webkit端

  • 问题内容: 我有一个读取系统属性的Java程序 我有一个Gradle构建文件 要么 但是 System.getProperty 将始终返回 null 。 我发现的唯一方法是通过以下方式将其添加到我的Gradle构建文件中 我如何通过-D做到这一点 问题答案: -P标志用于gradle属性,-D标志用于JVM属性。因为测试可能是在新的JVM中派生的,所以传递给gradle的-D参数不会传播到测试中-