标签: fatjar

如何使用Gradle创建具有实现依赖性的可执行胖jar

我在Gradle 4.6中有一个简单的项目,并希望制作一个可执行的jar.我试过shadow,gradle-fatjar-plugin,gradle-one-jar,spring-boot-gradle-plugin插件,但他们都没有增加我的依赖性声明implementation(我没有任何compile的).它适用compilegradle-one-jar插件,但我想有implementation依赖.

非常感谢你!

java executable-jar gradle gradle-plugin fatjar

32
推荐指数
5
解决办法
1万
查看次数

Gradle - FatJar - 无法找到或加载主类

我知道这个问题被问了很多并且有很多答案,但我仍然明白了,我不明白为什么......

我正在尝试.jar从带有gradle的依赖项的projet 生成一个.

我有一个班级src/main/java/Launcher.java,我有自己的main方法.

有我的 build.gradle

plugins {
    id 'java'
    id 'application'
}

version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = 'Launcher'

repositories {
    mavenCentral()
}

dependencies {
    compile 'commons-io:commons-io:2.1'
    compile 'io.vertx:vertx-core:3.4.0'
    compile 'io.vertx:vertx-web:3.4.0'
    compile 'com.google.code.gson:gson:1.7.2'
    compile "com.auth0:java-jwt:3.1.0"
    compile 'org.mongodb:mongo-java-driver:3.4.1'
    compile 'com.google.guava:guava:24.1-jre'
    compile 'commons-io:commons-io:2.6'
}

jar {
    manifest {
        attributes "Main-Class": mainClassName
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}
Run Code Online (Sandbox Code Playgroud)

$>gradle assemble用来生成我的jar然后$>java -jar path/to/my/.jar 我得到错误"无法找到或加载主类Launcher"...

我不明白为什么,当我查看.jar​​时,我有Launcher类和META-INF我有我的清单

截图

很抱歉在2018年仍然问这个问题,但是我在想弄清楚什么是错的.我希望somone能得到答案!

java gradle fatjar

10
推荐指数
2
解决办法
3218
查看次数

ShadowJar:没有为属性“mainClassName”指定值

在调整我的构建文件,我似乎 已经遇到了一个错误mainClassName

thufir@dur:~/NetBeansProjects/HelloSeleniumWorld$ 
thufir@dur:~/NetBeansProjects/HelloSeleniumWorld$ ./gradlew clean ShadowJar --stacktrace
> Task :shadowJar FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':shadowJar'.
> No value has been specified for property 'mainClassName'.

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskValidationException: A problem was found with the configuration …
Run Code Online (Sandbox Code Playgroud)

uberjar gradle shadowjar gradle-kotlin-dsl fatjar

10
推荐指数
2
解决办法
4440
查看次数

无法为 gradle 项目创建 JAR 文件

我想创建一个可以在 AWS 上上传的 jar 文件,但每次gradle jar从命令提示符运行命令时都会收到以下错误。

> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or -- 
debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org
Run Code Online (Sandbox Code Playgroud)

每当我gradle clean在命令提示符下运行时,我都会收到“构建成功”。这是build.gradle的内容:

> Task :compileJava …
Run Code Online (Sandbox Code Playgroud)

dependencies jar gradle spring-boot fatjar

8
推荐指数
2
解决办法
3万
查看次数

从 kotlin 多平台项目创建 fat jar

我最近从旧的 1.2 多平台切换到 1.3。不同之处在于,每个多平台模块只有一个 build.gradle 文件(我有 5 个),因此配置要少得多。但是,我似乎无法配置创建具有 jvm 平台所有依赖项的可运行胖 jar。我曾经在我的 jvm 项目和 jar 任务中使用标准的“应用程序”插件,但这不再起作用了。我发现有“jvmJar”任务,我修改了它(设置 Main-class),但创建的 jar 不包含依赖项,并且在 ClassNotFoundException 上崩溃。我该怎么做?

这就是我现在所拥有的:

    jvm() {
        jvmJar {
            manifest {
                attributes 'Main-Class': 'eu.xx.Runner'
            }
            from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
        }

    }
Run Code Online (Sandbox Code Playgroud)

jar kotlin kotlin-multiplatform fatjar

6
推荐指数
1
解决办法
1746
查看次数

JDK11 / JavaFX:如何在没有构建/依赖管理的情况下制作胖子?

我想不用说,我应该能够将Oracle自己的JDK与JavaFX(来自gluonhq)一起使用,以构建用户可以使用的可分发jar文件。

经过详尽的搜索,大量阅读(过去几个月中24小时或更长时间),最后是这个Google搜索查询:

how to make a fat jar -maven -gradle -scala -eclipse -ant -docker -hadoop -netbeans -jerkar -phy -mozni -yogurt -pizza - throwing -python -bacon
Run Code Online (Sandbox Code Playgroud)

我绝对在路的尽头。到底为什么这么多工作?我该如何构建JavaFX应用程序并将其提供给想要实际使用它的人,而又不知道如何使用应用程序本身呢?

java javafx fatjar javafx-11

5
推荐指数
1
解决办法
982
查看次数

gradle:排除制作 fatJar 的依赖

关于如何从 fatJar 中排除单个文件有很多重复的答案。通常,文件被排除在 META-INF 中,并且由于文件名冲突,或者因为它是从依赖库文件复制的签名,该签名对新创建的 Jar 文件无效。

maven 示例: 如何判断哪个签名 jar 导致 maven-shade-plugin 失败?

gradle 示例: 在 Gradle Build 中删除 Jar 签名

但是,这些解决方案仅单独删除了有问题的文件。

我们如何制作一个排除了特定依赖库(而不是该库中的单个文件)的 fatJar?

例如,在问题36226033 中,很容易排除从 BouncyCastle 复制过来的签名,但是有没有办法bcprov-jdk15on-*.jar完全排除依赖库,以便用户必须拥有可用的库才能执行生成的胖 Jar?

事实证明这是行不通的:

task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class': 'com.alphawallet.scripttool.Main'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    exclude('**/bcprov-jdk15on-1.62.jar')
    with jar
}

Run Code Online (Sandbox Code Playgroud)

使用exclude('**/bcprov-jdk15on-1.62.jar'),该 jar 文件的内容仍会复制到生成的胖 jar 中。

谢谢。动机是将我的 …

bouncycastle gradle fatjar

5
推荐指数
1
解决办法
2272
查看次数

Gradle fat jar 不包含库

我创建了一个简单的 Gradle Java 项目。该build.gradle文件如下所示:

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.10'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}

test {
    useJUnitPlatform()
}

task customFatJar(type: Jar) {
    archiveBaseName = 'fat-jar'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}
Run Code Online (Sandbox Code Playgroud)

我正在jar根据https://www.baeldung.com/gradle-fat-jar创建脂肪。

但是,生成的 jar 不包含commons-lang3库。它只包含项目的类文件。

为什么我的库没有包含在 fat 中jar

java jar gradle gradle-task fatjar

5
推荐指数
1
解决办法
1110
查看次数

java.lang.NoClassDefFoundError:无法初始化类 - Kotlin 对象

我有一个使用 Kotlin 的多模块化 Gradle 项目。其中一个模块具有 main 方法以及对其他模块的依赖关系。我需要从这个模块创建一个可执行的 jar。所以我尝试通过创建这样的 Jar 任务来做到这一点

jar {
    manifest {
        attributes(
                'Main-Class': 'my_package.RunnerKt'
        )
    }
    from {
        configurations.compileClasspath.filter{ it.exists() }.collect { it.isDirectory() ? it : zipTree(it) }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试了Shadow Gradle 插件。在这两种情况下,胖罐子都是按预期创建的,它似乎拥有我所有的类和依赖项。但是当我运行 jar 时,java -jar出现以下错误: java.lang.NoClassDefFoundError: Could not initialize class my_kotlin_object_classwhere my_kotlin_object_classis just a kotlin objectwith some variables.

在堆栈跟踪中,没有其他异常可能导致此异常,因此似乎只是此类本身存在问题。当我查看罐子时,我可以在那里看到这个文件。

我不明白这是 kotlin 对象本身和可执行 jar 的问题,还是我做错了什么?

java executable-jar gradle kotlin fatjar

5
推荐指数
1
解决办法
2951
查看次数

Gradle:Uber Jar 创建失败并显示“无法扩展 ZIP”

我正在尝试使用 Gradle 创建一个 Fat/Uber jar。不幸的是,我不断遇到以下错误:

> Task :fatJar FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':fatJar'.
> Could not expand ZIP '/home/me/.gradle/caches/modules-2/files-2.1/org.apache.drill/drill-client/1.13.0/c90c87887c292a3712eccc7cebdc48b0b9d93ec9/drill-client-1.13.0.pom'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use …
Run Code Online (Sandbox Code Playgroud)

gradle build.gradle fatjar

4
推荐指数
1
解决办法
1799
查看次数

原始 Axon 应用程序作为 Fat JAR 运行不会自动配置 Axon Beans

问题:

研究:在https://gitlab.com/ZonZonZon/simple-axon.git上,我编写了一个简单的Axon 应用程序,以表明使用Gradle 插件构建的JAR 工件在(运行时)不会自动配置 Axon beans罐)。虽然它在 Intellij 下运行良好。 com.github.johnrengelman.shadow

从终端中的项目根目录:

run gradle clean build shadowJar;
java -jar build/simpleaxon.jar;
Run Code Online (Sandbox Code Playgroud)

此处附有堆栈跟踪。我希望 Axon Autoconfiguration 默认提供 CommandBus、Snapshotter 等 Bean。

问题:如何在 fat jar 中自动配置默认的 axon beans?

gradle axon spring-boot fatjar

4
推荐指数
1
解决办法
203
查看次数