如何依赖复制库的gradle中的JAR(how to copy the dependencies l

2019-07-19 05:01发布

我有一个运行的JAR本的build.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
}

但没有什么变化......我无法找到该文件夹​​输出/库...

我怎么能依赖库罐子复制到指定的文件夹或路径?

Answer 1:

加:

build.dependsOn(copyToLib)

gradle build运行时,摇篮建立任务和任何任务取决于它(通过声明dependsOn )。 如果不设置build.dependsOn(copyToLib)摇篮将不会与生成任务副本任务关联。

所以:

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)


Answer 2:

我找到应用程序插件的方式太麻烦,并在其输出太冗长。 下面是我终于得到了一个安装我很高兴的,即建立在子目录依赖罐子分布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
}

托管的要点在这里 。

结果可以发现build/distributions及解压缩后的内容是这样的:

LIB /公地lang3-3.3.2.jar
与myJarFile.jar

内容MyJarFile.jar#META-INF/MANIFEST.mf

清单-版本:1.0
主类:com.somepackage.MainClass
类路径:LIB /公地lang3-3.3.2.jar



Answer 3:

该应用程序插件需要您设置主类名是这样的:

mainClassName = "com.test.HelloWorld"

你需要的是添加到您的构建脚本。 请记住,如果你尝试运行与应用程序java命令,你也将需要设置与类路径-cp

该应用程序插件提供的任务简化了这一过程distZip 。 如果您运行的任务你一个完整的分布是你下创建build/distributions 。 该发行版包括启动脚本和所有的依赖。 所生成的启动脚本已经设置classpath中给你,让你不必再处理它。



文章来源: how to copy the dependencies libraries JARs in gradle