当前位置: 首页 > 知识库问答 >
问题:

如何将构建的fat JAR作为一个梯度任务来执行?

宿嘉
2023-03-14

我将如何利用gradle应用程序插件从gradle执行胖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$ 

build.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文件本身。在从CLI运行fatJAR的上下文中。

参考:

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

运行从基于gradle的项目构建的可执行jar文件

使用gradle中的参数运行jar

如何在gradle中执行jar文件?

共有1个答案

终弘厚
2023-03-14

您需要的是添加一个类型为JavaExec的任务,该任务将配置类路径以包含使用matJar和主类集构建的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'
}

在这里你可以找到可运行的演示。

 类似资料:
  • 我已经为这个问题寻找了4天的解决方案,但没有成功, 首先做正常的Gradle构建任务产生了一个很小的7kB jar文件,显然不起作用,然后我为主类添加了jar配置: 现在是2MB! 仍然不够好,然后我找到了法特加/uberJar/影子任务,据说是同样的事情的同义词,所以我试着在另一个小的RMI应用程序上清理法特加任务,它将在服务器上运行,它工作得很好,将其复制到主应用程序,它产生和60MB jar

  • 我有一个多项目的Gradle构建,其中子项目被分配了独立于根项目的版本号。我想将这个版本号注入每个子项目中的几个资源文件中。通常,我会通过为根构建中的每个子项目配置processResources任务来实现这一点。然而,问题是Gradle似乎在加载子项目的构建文件之前执行processResources任务,并且正在注入“unspecified”作为版本。 目前,我的项目如下所示: /设置。格拉德

  • 问题内容: 好吧,我安装了elasticsearch-rails gem(版本0.1.5),并且可以清楚地看到gem文件中的任务。 但是当我跑步时 我得到这个错误。 运行也不显示任务。 elasticsearch正在运行,如果我卷曲它会回应我。 为什么这不起作用? 问题答案: 您需要创建elasticsearch.rake

  • 有时我需要在我的设备上运行一个命令或脚本,但它们不可用或不存在。 除了那些已经在其上可用的命令外,我们是否可以在设备的中添加一些额外的命令? 例如,将命令添加到我的设备(我的设备的API低于19),这在我的设备上是不可用的。 我知道如何使用获取设备上可用命令的列表 但我想添加更多的自定义命令和脚本,做一些特殊的工作。 有什么办法可以做到吗?还是不可能?

  • 在我的maven构建中,我必须按照下面提到的特定顺序执行以下步骤: exec-maven-plugin maven-antrun-plugin exec-maven-plugin maven-antrun-plugin maven-remote-resources-plugin,jaxb2-maven-plugin maven-javadoc-plugin exec-maven-plugin 在p

  • 我们有一个web应用程序,其中我们的最终用户将被提供一个选项来动态地调度作业,以便向一组人发送某种类型的报告。即在UI中选择日期、时间和时区。使用Spring Boot调度程序动态调度作业。 目前,我们正在使用一个线程池来异步地将报告发送到一个调度作业的人员组。 @Async(“CustomTaskExecutor”) public void callToAsyncMethod(User User