使用Rootbeer和Pack构建Gradle

时间:2015-03-10 06:29:43

标签: java gradle

我希望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

非常感谢任何帮助。

1 个答案:

答案 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 -sstderr内容为:

  

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)

这是我的角色完成的地方。