我希望Groovy / Gradle尝试将构建系统从ant和shell文件切换到gradle,并且我在代码上运行名为Pack.jar的Java程序时遇到问题。我已经尝试了从Exec到JavaExec的各种各样的东西,没有运气。这是我最近的失败尝试:
configurations {
pack
}
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = 1.7
version = '1.0'
repositories {
mavenCentral()
}
ant.importBuild('build.xml')
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
task pack(type: JavaExec) {
classpath = configurations.pack
workingDir = '~/Dropbox/git/BuildGraph/dist'
main = 'pack.Main'
args '-mainjar'
args 'dist/buildGraph.jar'
args '-directory'
args '../lib'
args '-destjar'
args 'buildGraph-pack.jar'
}
我试图重新创建第二个命令行序列:
$java -jar pack.jar
Usage 1: java -jar pack.jar -mainjar p2pmatrixmult.jar -libjar gson.jar -libjar hello.jar -destjar p2pmm_packed.jar
Usage 2: java -jar pack.jar -mainjar p2pmatrixmult.jar -directory jars -destjar p2pmm_packed.jar
非常感谢任何帮助。
答案 0 :(得分:0)
首先,pack
配置没有添加依赖项,是否需要配置?
其次你需要将参数传递给JavaExec
作为列表目前会有单个参数:'buildGraph-pack.jar'。
task pack(type: JavaExec) {
classpath = configurations.pack
workingDir = '~/Dropbox/git/BuildGraph/dist'
main = 'pack.Main'
args '-mainjar', 'dist/buildGraph.jar', '-directory', '../lib', '-destjar', 'buildGraph-pack.jar'
}
<强>更新强>
好的,我已经下载了这个项目。而且......首先,你缺乏对gradle如何工作的基本理解。请阅读gradle教程以了解基本概念。
第一步:
当您运行gradle pack -s
时,您将看到具有以下行的堆栈跟踪(可能不同):
引起:java.io.IOException:无法运行程序 “/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java” (在目录中 “/ private / tmp / BuildGraph /〜/ Dropbox / git / BuildGraph / dist”):错误= 2,否 这样的文件或目录
所以第一步是改变这一行:
workingDir = '~/Dropbox/git/BuildGraph/dist'
以下内容:
workingDir = project.file('dist')
再次gradle pack -s
,错误不同。时间:
第二步
一开始看起来很不清楚。现在的想法是添加流处理以解决问题 - 在pack
任务中添加以下行:
def os = new FileOutputStream(project.file('stdout'))
standardOutput = os
def es = new FileOutputStream(project.file('stderr'))
errorOutput = es
查看stderr
后,会发生以下情况:
错误:无法找到或加载主类包。主
第三步
您确实添加了pack
配置但没有定义任何依赖关系,dependencies
阻止应该是:
dependencies {
pack files('pack.jar')
}
再次gradle pack -s
,现在也不例外。但是stderr
文件中有一些内容:
java.io.FileNotFoundException:dist / buildGraph.jar(没有这样的文件或 目录)在java.io.FileInputStream.open(Native Method)at java.io.FileInputStream。(FileInputStream.java:131)at java.io.FileInputStream。(FileInputStream.java:87)at pack.Pack.addJar(Pack.java:43)at pack.Pack.run(Pack.java:31)at at pack.Main.runOnSpecifiedFiles(Main.java:71)at Pack.Main.run(Main.java:31)中的pack.Main.runOnDirectory(Main.java:80) 在pack.Main.main(Main.java:18)
第四步
将workingDir
更改为:
workingDir = project.rootDir
再次:gradle pack -s
和stderr
内容为:
java.lang.NullPointerException at pack.Main.findJarFilesInDirectory(Main.java:85)at Pack.Main.run(Main.java:31)中的pack.Main.runOnDirectory(Main.java:79) 在pack.Main.main(Main.java:18)
这是我的角色完成的地方。