有一个简单的Eclipse插件来运行Gradle,它只是使用命令行方式来启动gradle.
什么是maven编译和运行的gradle模拟
mvn compile exec:java -Dexec.mainClass=example.Example
这样gradle.build可以运行任何项目.
更新:有类似的问题maven的exec插件运行Java应用程序的gradle等价物是什么?之前问过,但解决方案建议改变每个项目build.gradle
package runclass;
public class RunClass {
public static void main(String[] args) {
System.out.println("app is running!");
}
}
Run Code Online (Sandbox Code Playgroud)
然后执行 gradle run -DmainClass=runclass.RunClass
:run FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> No main class specified
Run Code Online (Sandbox Code Playgroud) 我有一个使用自定义gradle任务运行的Java应用程序,并且应用程序在被调用时需要一些参数.这些是:
programName ( string | -f filename | -d key | -h)
Options:
string Message to be used.
-d key Use default messages, key must be s[hort], m[edium] or l[ong].
-f filename Use specified file as input.
-h Help dialog.
Run Code Online (Sandbox Code Playgroud)
Gradle任务看起来像:
task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)
我试过跑gradle run -h,但是不起作用.
我正在开发与远程主机通信的简单Spring Web应用程序,我想在公司代理后面进行本地测试.我使用"Spring Boot"gradle插件,问题是如何为JVM指定代理设置?
我尝试了几种方法:
gradle -Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080 bootRunexport JAVA_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"export GRADLE_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"但似乎没有一个工作 - "NoRouteToHostException"抛出"网络"代码.另外,我添加了一些额外的代码来调试JVM启动参数:
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
for (String arg: arguments) System.out.println(arg);
Run Code Online (Sandbox Code Playgroud)
并且只打印了一个参数:" - Dfile.encoding = UTF-8".
如果我在代码中设置系统属性:
System.setProperty("http.proxyHost", "X.X.X.X");
System.setProperty("http.proxyPort", "8080");
Run Code Online (Sandbox Code Playgroud)
一切正常!
我有一个Java程序,它读取一个System属性
System.getProperty("cassandra.ip");
Run Code Online (Sandbox Code Playgroud)
我有一个Gradle构建文件,我开始
gradle test -Pcassandra.ip=192.168.33.13
Run Code Online (Sandbox Code Playgroud)
要么
gradle test -Dcassandra.ip=192.168.33.13
Run Code Online (Sandbox Code Playgroud)
但是System.getProperty将始终返回null.
我找到的唯一方法是在我的Gradle构建文件中添加它
test {
systemProperty "cassandra.ip", "192.168.33.13"
}
Run Code Online (Sandbox Code Playgroud)
我如何通过-D来做到这一点
使用maven,我可以创建一个项目,使用其依赖项设置我的pom,使用main方法编写一个类,然后运行它类型:
mvn compile exec:java -Dexec.mainClass=thornydev.App
Run Code Online (Sandbox Code Playgroud)
这样做的等价物是什么?
我可以这样做gradle build,它为我构建一个jar文件,但是如果主类对其他jar有任何依赖,那么只运行jar就不会在没有设置类路径的情况下工作.gradle java插件可以运行应用程序并为我设置类路径吗?
我正在寻找一个简单的一次性使用命令行解决方案,而不是IDE集成(我知道如何做到这一点).
我有一个gradle任务,它启动一个java项目.基本上是这样的:
gradle run -PmainClass=package.path.ServiceMain
Run Code Online (Sandbox Code Playgroud)
现在,我想增加gradle启动的java进程的堆,因为标准堆大小太小.问题是我成功只增加了gradle进程的大小,而不是gradle项目启动的java进程的大小.我在Java代码中使用此命令检查堆大小:
Runtime.getRuntime().totalMemory()
Run Code Online (Sandbox Code Playgroud)
我测试了这个检查,这样使用它是有效的.但它告诉我,gradle始终以相同的堆大小启动我的Java进程.
我试验了这些选项:
DEFAULT_JVM_OPTS='-Xmx1024m -Xms512m'
GRADLE_OPTS='-Xmx1024m -Xms512m'
JAVA_OPTS='-Xmx1024m -Xms512m'
Run Code Online (Sandbox Code Playgroud)
没有成功.
我也试过这个:
gradle run -PmainClass=package.path.ServiceMain -DXmx1024m -DXms512m
Run Code Online (Sandbox Code Playgroud)
仍然没有成功.
当然,我已经在网上搜索了但我发现只有一些提示说我可以修改build.gradle文件.不幸的是,这不是我想要/可以的.
我需要在由gradle run任务启动时在命令行上为我的java程序指定java堆大小(由于实际的项目结构).
在此先感谢您的支持.任何帮助表示赞赏.
我开始使用上述答案提出的解决方案中的一些信息:应用程序插件方法
(的build.gradle)
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
run {
/* Need to split the space-delimited value in the exec.args */
args System.getProperty("exec.args").split()
}
Run Code Online (Sandbox Code Playgroud)
命令行:
gradle run -Dexec.args="arg1 arg2 arg3"
Run Code Online (Sandbox Code Playgroud)
它的预期用途很好,但似乎有副作用.传递命令行参数以进行运行是有意义的,但我必须为每个任务传递它们,例如:
gradle tasks -Dexec.args="arg1 arg2 arg3"
Run Code Online (Sandbox Code Playgroud)
如果我遗漏了
-Dexec.args="arg1 arg2 arg3"
Run Code Online (Sandbox Code Playgroud)
我明白了
"build failed with an exception"
Where:path\build.gradle line:18 which if where my run{ } is.
Run Code Online (Sandbox Code Playgroud)