jyc*_*han 36 dependencies copy gradle
我有一个这个build.gradle的runnable jar
apply plugin: 'java'
apply plugin: 'application'
manifest.mainAttributes("Main-Class" : "com.test.HelloWorld")
repositories {
mavenCentral()
}
dependencies {
compile (
'commons-codec:commons-codec:1.6',
'commons-logging:commons-logging:1.1.1',
'org.apache.httpcomponents:httpclient:4.2.1',
'org.apache.httpcomponents:httpclient:4.2.1',
'org.apache.httpcomponents:httpcore:4.2.1',
'org.apache.httpcomponents:httpmime:4.2.1',
'ch.qos.logback:logback-classic:1.0.6',
'ch.qos.logback:logback-core:1.0.6',
'org.slf4j:slf4j-api:1.6.0',
'junit:junit:4.+'
)
}
Run Code Online (Sandbox Code Playgroud)
但它运行失败,因为依赖项jar无法找到.
然后我添加此代码:
task copyToLib(type: Copy) {
into "$buildDir/output/libs"
from configurations.runtime
}
Run Code Online (Sandbox Code Playgroud)
但没有改变......我找不到文件夹输出/库...
如何将依赖库libs jar复制到指定的文件夹或路径?
xie*_*yun 42
加:
build.dependsOn(copyToLib)
Run Code Online (Sandbox Code Playgroud)
当gradle build运行时,摇篮建立任务和任何任务取决于它(通过声明dependsOn).如果不进行设置build.dependsOn(copyToLib),Gradle将不会将复制任务与构建任务相关联.
所以:
apply plugin: 'java'
apply plugin: 'application'
manifest.mainAttributes('Main-Class': 'com.test.HelloWorld')
repositories {
mavenCentral()
}
dependencies {
compile (
'commons-codec:commons-codec:1.6',
'commons-logging:commons-logging:1.1.1',
'org.apache.httpcomponents:httpclient:4.2.1',
'org.apache.httpcomponents:httpclient:4.2.1',
'org.apache.httpcomponents:httpcore:4.2.1',
'org.apache.httpcomponents:httpmime:4.2.1',
'ch.qos.logback:logback-classic:1.0.6',
'ch.qos.logback:logback-core:1.0.6',
'org.slf4j:slf4j-api:1.6.0',
'junit:junit:4.+'
)
}
task copyToLib(type: Copy) {
into "${buildDir}/output/libs"
from configurations.runtime
}
build.dependsOn(copyToLib)
Run Code Online (Sandbox Code Playgroud)
Mar*_*son 17
我发现应用程序插件的方式过于繁琐且输出过于冗长.这是我最终得到一个我很满意的设置,即在子目录中创建一个包含依赖项jars的分发zip文件,/lib并将所有依赖Class-Path项添加到清单文件中的条目:
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
}
// Task "distZip" added by plugin "java-library-distribution":
distZip.shouldRunAfter(build)
jar {
// Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
manifest {
attributes 'Main-Class': 'com.somepackage.MainClass',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
// How-to add class path:
// http://stackoverflow.com/questions/22659463/add-classpath-in-manifest-using-gradle
// https://gist.github.com/simon04/6865179
}
Run Code Online (Sandbox Code Playgroud)
在这里担任要点.
结果可以找到build/distributions,解压缩的内容如下所示:
lib/commons-lang3-3.3.2.jar
MyJarFile.jar
内容MyJarFile.jar#META-INF/MANIFEST.mf:
清单 - 版本:1.0
Main-Class:com.somepackage.MainClass
Class-Path:lib/commons-lang3-3.3.2.jar
从 Gradle 6.0 开始,它是:
tasks {
val deps by registering(Copy::class) {
from(configurations.runtimeClasspath)
into("build/deps")
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序插件要求您设置主类名称,如下所示:
mainClassName = "com.test.HelloWorld"
Run Code Online (Sandbox Code Playgroud)
您需要将其添加到您的构建脚本中。请记住,如果您尝试使用该java命令运行应用程序,您还需要使用-cp.
应用程序插件通过提供任务distZip简化了此过程。如果您运行该任务,则会在 下为您创建完整的发行版build/distributions。该发行版包含启动脚本和所有依赖项。生成的启动脚本已经为您设置了类路径,因此您不必再处理它。
| 归档时间: |
|
| 查看次数: |
34742 次 |
| 最近记录: |