3

我有一个编译我的项目的 build.gradle,运行测试创建一个 jar,然后用 launch4j 打包它。我也希望能够使用 wix 创建安装程序,但是我似乎在从 .execute() 启动它时遇到了很多麻烦。

蜡烛和灯光所需的文件保存在 \build\installer 中。但是,尝试通过在构建文件中调用 execute 来访问这些文件总是会失败。

我在 /build/installer 中创建了第二个 build.gradle,它确实有效。这是:

task buildInstaller {

def command = project.rootDir.toString() + "//" +"LSML Setup.wxs"
def candleCommand = ['candle', command]    
def candleProc = candleCommand.execute()
candleProc.waitFor()
def lightCommand = ['light' , '-ext', 'WixUIExtension', "LSML Setup.wixobj"]
def lightProc = lightCommand.execute()


}

有什么方法可以从主构建文件运行第二个构建文件并让它工作,或者有没有办法直接调用执行并让它工作?

谢谢。

4

2 回答 2

1

如果您的项目由几个 gradle 构建(gradle 项目)组成,您应该使用依赖项。使用execute()方法是一个坏主意。我会这样做:

ROOT/candle/candle.gradle

task build(type: Exec) {
    commandLine 'cmd', '/C', 'candle.exe', '...'
}

ROOT/app/build.gradle

task build(dependsOn: ':candle:build') {
    println 'build candle'
}

ROOT/app/settings.gradle

include ':candle'
project(':candle').projectDir = "$rootDir/../candle" as File

顺便说一句,我的任务有问题,Exec所以在我的项目中我用and.exec()蜡烛任务替换了它,可能看起来像这样:

task candle << {
    def productWxsFile = new File(buildDir, "Product.wxs")
    ant.exec(executable:candleExe, failonerror: false, resultproperty: 'candleRc') {
        arg(value: '-out')
        arg(value: buildDir.absolutePath+"\\")
        arg(value: '-arch')
        arg(value: 'x86')
        arg(value: '-dInstallerDir='+installerDir)
        arg(value: '-ext')
        arg(value: wixHomeDir+"\\WixUtilExtension.dll")
        arg(value: productWxsFile)
        arg(value: dataWxsFile)
        arg(value: '-v')

    }
    if (!ant.properties['candleRc'].equals('0')) {
        throw new Exception('ant.exec failed rc: '+ant.properties['candleRc'])
    }
}

有关多项目的更多信息,您可以在此处找到http://www.gradle.org/docs/current/userguide/multi_project_builds.html

于 2013-09-16T08:50:59.423 回答
0

SetupBuilder插件可以完成这项工作。它为您的 java 应用程序创建 lauch4j 启动器,对其进行签名,创建 msi 文件并对其进行签名。您不需要使用复杂的 WIX 工具集语法。

于 2016-03-02T12:45:42.727 回答