我在Gradle 4.6中有一个简单的项目,并希望制作一个可执行的jar.我试过shadow
,gradle-fatjar-plugin
,gradle-one-jar
,spring-boot-gradle-plugin
插件,但他们都没有增加我的依赖性声明implementation
(我没有任何compile
的).它适用compile
于gradle-one-jar
插件,但我想有implementation
依赖.
非常感谢你!
我知道这个问题被问了很多并且有很多答案,但我仍然明白了,我不明白为什么......
我正在尝试.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能得到答案!
在调整我的构建文件,我似乎 已经遇到了一个错误有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) 我想创建一个可以在 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) 我最近从旧的 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) 我想不用说,我应该能够将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应用程序并将其提供给想要实际使用它的人,而又不知道如何使用应用程序本身呢?
关于如何从 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 中。
谢谢。动机是将我的 …
我创建了一个简单的 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
?
我有一个使用 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_class
where my_kotlin_object_class
is just a kotlin object
with some variables.
在堆栈跟踪中,没有其他异常可能导致此异常,因此似乎只是此类本身存在问题。当我查看罐子时,我可以在那里看到这个文件。
我不明白这是 kotlin 对象本身和可执行 jar 的问题,还是我做错了什么?
我正在尝试使用 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) 问题:
研究:在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?
fatjar ×11
gradle ×9
java ×5
jar ×3
kotlin ×2
spring-boot ×2
axon ×1
bouncycastle ×1
build.gradle ×1
dependencies ×1
gradle-task ×1
javafx ×1
javafx-11 ×1
shadowjar ×1
uberjar ×1