到目前为止,我通过Eclipse"Export ..."功能创建了可运行的JAR文件,但现在我切换到IntelliJ IDEA和Gradle进行构建自动化.
这里的一些文章提出了"应用程序"插件,但这并不完全导致我期望的结果(只是一个JAR,没有启动脚本或类似的东西).
如何通过Eclipse"Export ..."对话框实现相同的结果?
如何使用gradle将配置文件或任何其他资源添加到我的jar中?
我的项目结构:
src/main/java/com/perseus/.. --- Java包(源文件)
src/main/java/config/*.xml --- Spring配置文件
预期的罐子结构:
com/perseus/.. --- Java包(类文件)
config/*.xml --- Spring配置文件
我是Gradle新手.我想构建一个uberjar(AKA fatjar),它包含项目的所有传递依赖项.我需要在"build.gradle"中添加哪些行?
这就是我现在所拥有的:(我几天前从某处复制过,但不记得从哪里开始.)
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
manifest {
attributes 'Implementation-Title': 'Foobar',
'Implementation-Version': version,
'Built-By': System.getProperty('user.name'),
'Built-Date': new Date(),
'Built-JDK': System.getProperty('java.version'),
'Main-Class': mainClassName
}
}
Run Code Online (Sandbox Code Playgroud) 正如标题所述,我想知道如何修改它gradle.build.kts以便创建一个独特jar的所有依赖项(包括kotlin lib)的任务.
我在Groovy中找到了这个示例:
//create a single Jar with all dependencies
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar File Example',
'Implementation-Version': version,
'Main-Class': 'com.mkyong.DateUtils'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在kotlin中写出来,除了:
task("fatJar") {
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个 gradle 项目,但是当我尝试时,$ gradle build我得到以下输出:
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :jar FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':jar'.
> Entry .classpath is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.0/dsl/org.gradle.api.file.CopySpec.html#org.gradle.api.file.CopySpec:duplicatesStrategy 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 …Run Code Online (Sandbox Code Playgroud) 在Gradle(5.0+)中有两种创建方法,即任务:
tasks {
val javadocJar by creating(Jar::class) {
val javadoc by tasks
from(javadoc)
classifier = "javadoc"
}
}
Run Code Online (Sandbox Code Playgroud)
和
tasks {
val javadocJar by registering(Jar::class) {
val javadoc by tasks
from(javadoc)
classifier = "javadoc"
}
}
Run Code Online (Sandbox Code Playgroud)
基本上是相同的API,有什么区别?
我创建了一个简单的 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?
我的build.gradle文件如下
apply plugin: 'java' sourceCompatibility = 1.8
repositories {
mavenCentral() }
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'io.javalin:javalin:1.3.0'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.4'
compile 'org.slf4j:slf4j-simple:1.7.25' }
jar {
manifest {
attributes(
'Class-Path': configurations.runtime.files.collect {"$it.name"}.join(' '),
'Main-Class': 'products.ProductAPI'
)
} }
task stage {
dependsOn 'build'
dependsOn 'clean'
build.mustRunAfter clean }
Run Code Online (Sandbox Code Playgroud)
尝试使用gradle构建Java应用程序并将其部署到heroku服务器.我有一些问题,java -jar build/libs/MyApp-0.0.1.jar因为它返回以下内容:
线程"main"中的异常java.lang.NoClassDefFoundError:io/javalin/Javalin at products.ProductAPI.main(ProductAPI.java:7)引起:java.lang.ClassNotFoundException:io.javalin.Javalin at java.net.URLClassLoader .findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:338)at java.lang.ClassLoader.loadClass( ClassLoader.java:357)
gradle ×7
java ×5
build ×2
build.gradle ×2
jar ×2
kotlin ×2
compilation ×1
dependencies ×1
fatjar ×1
gradle-task ×1
groovy ×1
heroku ×1
uberjar ×1