在gradle.build中使用fatjar插件时如何指定主类
我感兴趣的是在一个可执行jar文件中构建一个jar,其中包含所有模块依赖项和外部jar,我将能够使用在gradle.build中使用fatjar插件时如何指定主类,jar,build,gradle,intellij-13,uberjar,Jar,Build,Gradle,Intellij 13,Uberjar,我感兴趣的是在一个可执行jar文件中构建一个jar,其中包含所有模块依赖项和外部jar,我将能够使用java-jar myApp.jar运行该文件 我有模块A,它依赖于模块B。 目前我正在使用gradle,我的build.gradle脚本如下所示: apply plugin: 'fatjar' description = "A_Project" dependencies { compile project(':B_Project') compile
java-jar myApp.jar
运行该文件
我有模块A,它依赖于模块B。
目前我正在使用gradle,我的build.gradle
脚本如下所示:
apply plugin: 'fatjar'
description = "A_Project"
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'com.organization.project.package.mainClassName'
version = '1.0'
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from {configurations.compile.collect {zipTree(it)}} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
manifest {
attributes 'Main-Class': 'com.organization.project.package.mainClassName'
}
}
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
当我通过gradle命令构建它时:cleanbuildfatjar
fatjar“a.jar”按预期创建。
但是,如我在上面所写,使用运行它会导致:
在A.jar中没有主清单属性
如何修改我的
build.gradle
文件并指定主类或清单?我自己已经弄明白了:
我用过uberjar Gradle任务。
现在,我的build.gradle文件如下所示:
apply plugin: 'fatjar'
description = "A_Project"
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'com.organization.project.package.mainClassName'
version = '1.0'
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from {configurations.compile.collect {zipTree(it)}} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
manifest {
attributes 'Main-Class': 'com.organization.project.package.mainClassName'
}
}
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
现在我将它与命令一起使用:
清洁构建uberjar
它构建了一个很好的可运行jar:)为了使用fatjar使其工作,我在fatjar任务中添加了一个清单部分:
task fatJar(type: Jar) {
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
attributes 'Main-Class': 'com.organization.project.package.mainClassName'
}
}
不知道怎么帮你。似乎命令
clean build fatjar
有不同的输出。这是真的吗?请参阅中的“定制MANIFEST.MF”。我需要在MANIFEST下面添加with jar
,以获取uberjar中java/main/resources
中的文件。在collect内部还应该是{it.isDirectory()?it:zipTree(it)}。。。