java - 如何将构建的 fat JAR 作为 gradle 任务执行?

标签 java gradle jar build classpath

我如何利用 gradle application 插件从 gradle 执行 fat JAR:

thufir@doge:~/NetBeansProjects/selenium$ 
thufir@doge:~/NetBeansProjects/selenium$ gradle clean fatJar;java -jar build/libs/selenium-all.jar 

BUILD SUCCESSFUL in 23s
4 actionable tasks: 4 executed
Jul 18, 2017 7:47:49 PM net.bounceme.dur.web.selenium.Main main
INFO: running..
1500432473386   geckodriver INFO    Listening on 127.0.0.1:30879
1500432475320   geckodriver::marionette INFO    Starting browser /usr/lib/firefox/firefox with args ["-marionette"]
1500432488971   addons.xpi  WARN    Add-on langpack-en-ZA@firefox.mozilla.org is not compatible with application version.
1500432488978   addons.xpi  WARN    Add-on langpack-en-ZA@firefox.mozilla.org is not compatible with application version.
1500432489767   addons.xpi  WARN    Add-on langpack-en-GB@firefox.mozilla.org is not compatible with application version.
1500432489769   addons.xpi  WARN    Add-on langpack-en-GB@firefox.mozilla.org is not compatible with application version.
^Cthufir@doge:~/NetBeansProjects/selenium$ 

构建.gradle:

plugins {
    id 'com.gradle.build-scan' version '1.8' 
    id 'java'
    id 'application'
}

mainClassName = 'net.bounceme.dur.web.selenium.Main'

buildScan {
    licenseAgreementUrl = 'https://gradle.com/terms-of-service'
    licenseAgree = 'yes'
}

repositories {
    jcenter()
}

jar {
    manifest {
        attributes 'Main-Class': 'net.bounceme.dur.web.selenium.Main'
        attributes 'Class-path': 'selenium-java-3.4.0.jar'
    }
}

task fatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': '3.4.0'
        attributes 'Main-Class': 'net.bounceme.dur.web.selenium.Main'
    }
}

dependencies {
     compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.4.0'
     compile group: 'org.seleniumhq.selenium', name: 'selenium-server', version: '3.4.0'

    compile group: 'org.seleniumhq.selenium', name: 'selenium-firefox-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-ie-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-safari-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-edge-driver', version: '3.4.0'

}

附带条件是我希望实际构建 fat JAR 并希望执行实际 JAR 文件本身。在 context从 CLI 运行 fatJAR。

引用:

https://docs.gradle.org/current/userguide/userguide_single.html

Running an executable jar file built from a gradle based project

Run jar with parameters in gradle

How to execute jar file in gradle?

最佳答案

您需要添加一个 JavaExec 类型的任务,该任务将配置类路径以包含使用 fatJar 构建的 jar 和主类集。这是我准备的 build.gradle,它显示了它的外观:

plugins {
    id 'java'
}

repositories {
    jcenter()
    mavenCentral()
}

task fatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    manifest {
        attributes 'Main-Class': 'org.Lol'
    }
}

dependencies {
    compile 'com.google.guava:guava:22.0'
}

task runFatJar(type: JavaExec) {
    dependsOn fatJar
    classpath = fatJar.outputs.files
    main = 'org.Lol'
}

here您可以找到可运行的演示。

关于java - 如何将构建的 fat JAR 作为 gradle 任务执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45180264/

相关文章:

java - 我可以将不同 jar 版本的 wars 部署到 Jetty 吗?

java - 如何使用 ruby​​ 获取 java 输出

java - 如何使用 selenium 选择不包含特定类的元素

java - < 和 > 是什么意思,比如 implements Comparable<BigInteger>?

android - 更新到 build-plugin 3.4.0 后房间出现问题

java - 读取 .jar 文件中的图像时程序崩溃

java - URLConnection setRequestProperty 与 addRequestProperty

gradle - Gradle用户手册示例失败

java - 无法排除 jar 内的依赖项

java - 将 Opencsv jar 添加到项目后出现 NoClassDefFoundError