首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Rootbeer和Pack构建Gradle

用Rootbeer和Pack构建Gradle
EN

Stack Overflow用户
提问于 2015-03-10 06:29:43
回答 1查看 199关注 0票数 1

我是Groovy/Gradle newb,试图将构建系统从ant和shell文件切换到gradle,在我的代码中运行一个名为Pack.jar的Java程序时遇到了困难。从Exec到JavaExec,我已经尝试过各种各样的东西,但没有运气。以下是我最近一次失败的尝试:

代码语言:javascript
复制
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'
}

我正在尝试重新创建第二个命令行序列:

代码语言:javascript
复制
$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

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 08:16:53

首先,没有为pack配置添加依赖项,这是所需的配置吗?

其次,您需要将参数作为一个列表传递给JavaExec,目前只有一个参数:'buildGraph-pack.jar‘。

代码语言:javascript
复制
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时,您将查看具有以下行(可能不同)的堆栈跟踪:

由:"/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java“:无法运行程序java.io.IOException引起(在目录"/private/tmp/BuildGraph/~/Dropbox/git/BuildGraph/dist"):error=2中,没有这样的文件或目录)

因此,第一步是修改这一行:

代码语言:javascript
复制
 workingDir = '~/Dropbox/git/BuildGraph/dist'

以下各点:

代码语言:javascript
复制
workingDir = project.file('dist')

同样,gradle pack -s和错误是不同的。时间:

第二步

一开始看上去很不清楚。现在的想法是添加流处理以获取问题--在pack任务中添加以下行:

代码语言:javascript
复制
def os = new FileOutputStream(project.file('stdout'))
standardOutput = os
def es = new FileOutputStream(project.file('stderr'))
errorOutput = es

查看stderr后,会发生以下情况:

错误:找不到或加载主类pack.Main

第三步

您确实添加了pack配置,但没有对其定义任何依赖项,dependencies块应该是:

代码语言:javascript
复制
dependencies {
   pack files('pack.jar')
}

再说一遍gradle pack -s,现在也不例外。但是stderr文件中有一些内容:

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 pack.Main.runOnSpecifiedFiles(Main.java:71) at pack.Main.runOnDirectory(主方法)( .java:80)在pack.Main.run(Main.java:31) at pack.Main.main(Main.java:18)

第四步

workingDir更改为:

代码语言:javascript
复制
workingDir = project.rootDir

再次声明:gradle pack -sstderr内容是:

pack.Main.findJarFilesInDirectory(Main.java:85) at pack.Main.runOnDirectory(Main.java:79) at pack.Main.run(Main.java:31) at pack.Main.main(Main.java:18)

这就是我的角色结束的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28957436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档