Gradle 在脂肪罐中包括来源
我将Gradle用于一个简单的Java项目,并希望生成一个fat JAR,其中还包含源代码 我在以下位置准备了一个示例存储库:。我尝试了这个Gradle 在脂肪罐中包括来源,gradle,jar,shadowjar,Gradle,Jar,Shadowjar,我将Gradle用于一个简单的Java项目,并希望生成一个fat JAR,其中还包含源代码 我在以下位置准备了一个示例存储库:。我尝试了这个build.gradle配置: plugins { id "com.github.johnrengelman.shadow" version "1.2.4" } apply plugin: 'java' shadowJar { classifier = 'fat' manifest { attributes 'Main-Class': '
build.gradle
配置:
plugins { id "com.github.johnrengelman.shadow" version "1.2.4" }
apply plugin: 'java'
shadowJar {
classifier = 'fat'
manifest { attributes 'Main-Class': 'org.example.MyMain' }
}
task packageSources(type: Jar) {
from sourceSets.main.allSource
}
artifacts.archives packageSources
我可以通过以下方式构建此功能:
./gradlew clean build shadowjar
这将在build/libs
目录中生成两个JAR文件:
-没有源代码的fat jar示例fat.jar
-包含(仅)源代码的jarexample.jar
java
或groovy
插件,Shadow将
自动配置以下行为:
[……]
- 将
任务配置为包括来自 项目的主源集shadowJar
可以从Gradle生成一个可执行的fat JAR,其中还包含源代码?我不能100%确定
shadowJar
如何处理源代码,但您可以使用自己的fat JAR实现
apply plugin: 'groovy'
repositories {
jcenter()
}
version = "0.1"
group = "com.jbirdvegas.so"
dependencies {
// some dependencies to show the use case
compile localGroovy(), 'org.slf4j:slf4j-api:1.7.21', 'org.slf4j:slf4j-simple:1.7.21'
testCompile 'junit:junit:4.12'
}
jar {
// set manifest
manifest.attributes 'Implementation-Title': 'Executable fat jar',
'Implementation-Version': version,
'Main-Class': 'com.jbirdvegas.q40744642.Hello'
}
task fatJar(type: Jar) {
// baseName must be unique or it clashes with the default jar task output
baseName = "$project.name-fat"
// make sure you have a valid manifest
manifest = jar.manifest
// Here put the source output (class) files in the jar
// as well as dependencies (jar) files.
from sourceSets.main.output,
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
// make sure our fatJar always runs immediately after the jar task
jar.finalizedBy fatJar
现在,在jar任务执行之后,我们有了一个随时可用的可执行jar
$ java -jar build/libs/q40744642-fat-0.1.jar
[main] INFO com.jbirdvegas.q40744642.Hello - Hello World!
为了完整起见,这里是我的Hello.groovy
类
package com.jbirdvegas.q40744642
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class Hello {
static main(args) {
Logger logger = LoggerFactory.getLogger(Hello.class)
logger.info("Hello World!")
}
}
谢谢你的回答。我删除了与Groovy相关的部分,并使用
gradle clean-fatJar
在我的存储库中进行了尝试,但生成的example-fat-0.1.jar
不包含任何源代码。我把最新版本推到了