2016-07-06 72 views
3

运行使用Gradle构建的Java应用程序需要向类路径添加每个单独库的目录,因为它将它们存储在各个目录中。如何使用gradle构建的项目执行命令行工具?

因此,当您查看在IntelliJ中启动应用程序的命令时,您可以轻松地看到整个屏幕充满了类路径依赖关系。

这对IntelliJ很好,因为它可以自动计算出来,但我希望能够在终端中运行我的命令行工具,在那里写参数而不是每次我想改变任何东西时编辑运行配置。如何在不从IDE粘贴整个机器特定的JAR依赖关系的情况下这样做?

是否有可能在开发环境中执行此操作,而无需创建捆绑所有库的巨大JAR文件?

+0

难道我理解正确的话,你想从命令行运行jar,还可以为程序提供命令行参数,而无需为JVM提供正确的参数? – majk

+0

我不介意它是从JAR还是从类文件运行。我想要一个可以让我调用程序的单行程式。 – Alicia

回答

4

看看JavaExec task。您可以创建自定义任务,例如:

task customRun(type: JavaExec) { 
    classpath = sourceSets.main.runtimeClasspath 
    main = "fully.qualified.name.of.your.main" 
    args = ["100", "1000" ...] // the command line options for your tool 
    jvmArgs = [ ... ] // additional JVM args you might need 
} 

然后你就可以使用gradle customRun调用它。如果你希望能够提供命令行参数,我会建议使用gradle这个属性:

gradle -PcustomRunArgs="100 1000" customRun 

和修改任务抢参数:

task ... { 
    ... 
    if (project.hasProperty('customRunArgs')) { 
     args = customRunArgs.split(' ') 
    } 
    ... 
} 
+0

它不处理带空格的参数。你需要一个解析器。如果没有包装脚本,它太麻烦了,它也会使用大量的gradle stuff来混淆输出,但它比IDE中的副本更好。 – Alicia

+1

要减少gradle冗长度,请使用开关'-q'。要使用空格支持命令行选项,请查看[CliBuilder](http://mrhaki.blogspot.ch/2009/09/groovy-goodness-parsing-commandline.html) – majk

相关问题