Java 按需在Gradle中制作无脂罐
我在用Gradle。通常我是在造肥罐子。没有问题,但在这个时候,我还需要做一个不含脂肪的罐子。 我的意思是我想排除所有依赖的库,并使用Java 按需在Gradle中制作无脂罐,java,gradle,jar,Java,Gradle,Jar,我在用Gradle。通常我是在造肥罐子。没有问题,但在这个时候,我还需要做一个不含脂肪的罐子。 我的意思是我想排除所有依赖的库,并使用-cp选项运行jar,如下所示: java-cp”/sample1/lib/myjar.jar:/sample2/lib/dependent.jar“com.example.main.Runner (在FAT jar中,java-jar myjar.jar是同一个东西,它包含dependent.jar) 这是我的build.gradle apply plugin:
-cp
选项运行jar,如下所示:
java-cp”/sample1/lib/myjar.jar:/sample2/lib/dependent.jar“com.example.main.Runner
(在FAT jar中,java-jar myjar.jar
是同一个东西,它包含dependent.jar
)
这是我的build.gradle
apply plugin: 'java'
apply plugin: 'application'
jar.baseName = 'myjar'
version = ''
def mainClass = 'com.example.main.Runner'
mainClassName = mainClass
def defaultEncoding = 'UTF-8'
repositories {
flatDir dirs: "${projectDir}/libs"
}
dependencies {
compile ':commons-chain:1.2'
compile ':commons-io:2.4'
testCompile ':junit:4.12'
testCompile ':hamcrest-core:1.3'
}
jar {
manifest {
attributes 'Implementation-Version': version,
'Main-Class': mainClass
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
我还是想把这个留着做普通的胖罐子。
因此,我尝试附加一个任务,如下所示:
试试看
试试看
试试看
在附加它之后,我运行了gradlemakeslimjar
。
我上面的所有尝试都失败了(以编程方式,成功了),只创建了名为myjar.slim.jar
的胖jar
有没有办法在同一个build.gradle
文件中同时使用胖jar和非胖jar?
... 还是我做错了什么
我认为删除<代码>应用插件:“应用程序”< /代码>是我的最后一招。 如果可以的话,请帮助我
谢谢,将依赖项添加到jar的代码如下:
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
默认情况下,您的构建脚本通常会构建一个“slim jar”,除非您添加了代码来覆盖此行为:
jar {
manifest {
attributes 'Implementation-Version': version,
'Main-Class': mainClass
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
我建议删除这些行。当您运行gradleclean build
时,这将构建一个正常的jar(没有依赖项)
然后,您可以添加一个额外的任务来创建“fatjar”,如下所示:
task fatjar << {
jar.doFirst {
println "creating fatjar"
jar {
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
}
}
task fatjar感谢您的回答。根据您的建议,我删除了jar{}
部分,并添加了fatjar
任务。它工作得很好!非常感谢。请注意,最近far jar在一些社区被称为uber jar。见:
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
jar {
manifest {
attributes 'Implementation-Version': version,
'Main-Class': mainClass
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
task fatjar << {
jar.doFirst {
println "creating fatjar"
jar {
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
}
}