英文:
Alternative to fat jar in gradle java project
问题
我今天才开始使用Gradle。所以我正在尝试一些随机的东西。我有下面的build.gradle
文件:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter-api:5.4.2')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.4.2')
compile 'com.googlecode.json-simple:json-simple:1.1.1'
}
test {
useJUnitPlatform()
}
jar {
manifest {
attributes(
'Main-Class': 'src.main.java.demo.Hello'
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it)}
}
}
我在某处看到我在from
块内部使用的方法会创建一个"fat jar",这不是一个好的做法。由于我对这方面还比较新,我谦卑地想要询问是否有其他替代方法。是将classpath添加到清单还是其他什么方法?
主要目的是捆绑第三方依赖的jar文件,这些文件将在运行时使用。
谢谢!
英文:
I have started on gradle today itself. So I am trying out random things. I have below build.gradle
file:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter-api:5.4.2')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.4.2')
compile 'com.googlecode.json-simple:json-simple:1.1.1'
}
test {
useJUnitPlatform()
}
jar {
manifest {
attributes(
'Main-Class': 'src.main.java.demo.Hello'
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it)}
}
}
I have read somewhere that the method that I am using inside from
block will create fat jar, which is not a good practice. As I am fairly new to this, I humbly want to ask the alternative to this. Is it adding classpath to manifest or something else??
The primary purpose is to bundle third party dependency jar files that will be used on runtime.
Thank You!
答案1
得分: 1
你可以将所有依赖项与你自己的JAR文件以及可能的外部资源一起放入一个ZIP文件中,或者构建一个安装程序,或者(如果你正在构建一个Web应用程序)构建一个WAR或EAR文件。无论哪种情况,Gradle都会为你处理清单。
(此外,使用"fat JARs"也没有太大问题,这在当今相当常见,而且它们确实有效。)
英文:
You could put all your dependencies into a ZIP file together with your own JAR and possibly external resources, or build an installer, or (if you're building a web app) build a WAR or EAR file. Gradle will take care of the manifest for you in any case.
(Also, there is nothing really wrong with fat JARs, they are fairly common these days and they do work.)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论