phi*_*son 63 jar uberjar gradle
在gradle中 - 我如何在lib目录(特别是lib/enttoolkit.jar和lib/mail.jar)中的jar输出jar中嵌入jar?
luc*_*cas 37
逐字解读:http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar
Gradle 0.9:
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
Run Code Online (Sandbox Code Playgroud)
Gradle 0.8:
jar.doFirst {
for(file in configurations.compile) {
jar.merge(file)
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段仅包含该项目的编译依赖项,而不包含任何传递运行时依赖项.如果您还想合并它们,请将configurations.compile替换为configurations.runtime.
编辑:只选择你需要的罐子
做一个新的配置,releaseJars也许吧
configurations {
releaseJars
}
Run Code Online (Sandbox Code Playgroud)
将所需的jar添加到该配置中
dependencies {
releaseJars group: 'javax.mail', name: 'mail', version: '1.4'
//etc
}
Run Code Online (Sandbox Code Playgroud)
然后在上面概述的jar任务中使用该配置.
sti*_*gkj 32
如果libs项目中的目录中有所有jar(让我们调用它),您只需要:
jar {
into('lib') {
from 'libs'
}
}
Run Code Online (Sandbox Code Playgroud)
我想这些罐子更有可能是某种依赖.然后你可以这样做:
configurations {
// configuration that holds jars to copy into lib
extraLibs
}
dependencies {
extraLibs 'org.something:something-dep1:version'
extraLibs 'org.something:something-dep2:version'
}
jar {
into('lib') {
from configurations.extraLibs
}
}
Run Code Online (Sandbox Code Playgroud)
tol*_*ius 20
简单:
task copyToLib( type: Copy ) {
into "$buildDir/libs/lib"
from configurations.runtime
}
jar { dependsOn copyToLib }
Run Code Online (Sandbox Code Playgroud)
运行:
$ gradle jar
...
$ tree build/libs
build/libs
??? your-project-0.0.1.BUILD-SNAPSHOT.jar
??? lib
??? akka-actor-2.0.jar
??? akka-camel-2.0.jar
??? ... ... ...
??? spring-expression-3.1.0.RELEASE.jar
??? zmq-2.1.9.jar
1 directory, 46 files
Run Code Online (Sandbox Code Playgroud)
我也需要做类似的事情并且不能完全得到Guus和stigkj建议的工作,但是在他们的帮助下得到了足够的接近才能使这个工作(Guus的例子dependencies { compile { extendsFrom myLibs }}为我打破了关闭.
apply plugin: 'groovy'
repositories {
mavenCentral()
}
configurations {
// custom config of files we want to include in our fat jar that we send to hadoop
includeInJar
}
dependencies {
includeInJar 'org.codehaus.groovy:groovy:1.8.6'
configurations.compile.extendsFrom(configurations.includeInJar)
}
jar {
into('lib') {
println "includeInJar: " + configurations.includeInJar.collect { File file -> file }
from configurations.includeInJar
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行gradle jar并检查创建的jar给了我这个输出,显示我得到了jar文件,以及它依赖于"fat jar"内的所有jar文件:
% gradle jar
includeInJar: [/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.codehaus.groovy/groovy/1.8.6/jar/553ca93e0407c94c89b058c482a404427ac7fc72/groovy-1.8.6.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/antlr/antlr/2.7.7/jar/83cd2cd674a217ade95a4bb83a8a14f351f48bd0/antlr-2.7.7.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm/3.2/jar/9bc1511dec6adf302991ced13303e4140fdf9ab7/asm-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-tree/3.2/jar/cd792e29c79d170c5d0bdd05adf5807cf6875c90/asm-tree-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-commons/3.2/jar/e7a19b8c60589499e35f5d2068d09013030b8891/asm-commons-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-util/3.2/jar/37ebfdad34d5f1f45109981465f311bbfbe82dcf/asm-util-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-analysis/3.2/jar/c624956db93975b7197699dcd7de6145ca7cf2c8/asm-analysis-3.2.jar]
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
BUILD SUCCESSFUL
Total time: 3.387 secs
% jar tvf build/libs/gradletest.jar
0 Mon Mar 12 11:40:00 CDT 2012 META-INF/
25 Mon Mar 12 11:40:00 CDT 2012 META-INF/MANIFEST.MF
0 Mon Mar 12 11:40:00 CDT 2012 lib/
5546084 Mon Mar 05 13:13:32 CST 2012 lib/groovy-1.8.6.jar
445288 Mon Mar 05 13:13:38 CST 2012 lib/antlr-2.7.7.jar
43398 Mon Mar 05 13:13:40 CST 2012 lib/asm-3.2.jar
21878 Mon Mar 05 13:13:40 CST 2012 lib/asm-tree-3.2.jar
33094 Mon Mar 05 13:13:40 CST 2012 lib/asm-commons-3.2.jar
36551 Mon Mar 05 13:13:40 CST 2012 lib/asm-util-3.2.jar
17985 Mon Mar 05 13:13:40 CST 2012 lib/asm-analysis-3.2.jar
Run Code Online (Sandbox Code Playgroud)
可以尝试下面的代码.它取决于jar任务,属于Type Jar
task createJobJar(dependsOn:jar,type:Jar) {
manifest {
attributes(
"Implementation-Title": 'Job '
,"Implementation-Version": version
)
}
classifier 'job'
destinationDir new File("$buildDir")
into('libs'){
from configurations.compile
}
into('classes'){
from "$buildDir/classes"
}
into('resources'){
from "$projectDir/src/main/resources"
}
into('scripts'){
from "$projectDir/src/main/scripts"
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将在不同的目录中打包不同的内容.在gradle 2.2上测试
小智 6
我需要你提出的相同的事情,并使用这种方法.您可能不需要自定义配置声明,但我需要将本地使用的jar文件与超级构建文件中声明的jar文件分开.
configurations{
//declare custom config if necessary, otherwise just use compile
myLibs
}
dependencies {
//add lib/*.jar files to myLibs
myLibs fileTree(dir: 'lib', include: '*.jar')
compile {
//set compile configuration to extend from myLibs
extendsFrom myLibs
}
}
// task to copy libs to output/lib dir
task copyToLib(type: Copy) {
into "$buildDir/output/lib"
from configurations.myLibs
}
jar {
//include contents of output dir
from "$buildDir/output"
manifest {
//...
}
}
//set build task to depend on copyToLib
build.dependsOn(copyToLib)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89800 次 |
| 最近记录: |