如何从gradle依赖项(jar文件)的子集创建主jar文件

如何从gradle依赖项(jar文件)的子集创建主jar文件,jar,gradle,build.gradle,Jar,Gradle,Build.gradle,我有以下依赖项,我想创建一个主jar文件,其中只包含5个来自gradle dependencies的jar文件3个来自根项目依赖项的jar文件和2个来自子项目依赖项的jar文件,我想只包含以下文件“spring webmvc”,“spring test”和“parameters”以及在my master.jar文件的子项目依赖项中定义的另外两个jar文件 dependencies { compile project(':java_farm_core') compile grou

我有以下依赖项,我想创建一个主jar文件,其中只包含5个来自gradle dependencies的jar文件3个来自根项目依赖项的jar文件和2个来自子项目依赖项的jar文件,我想只包含以下文件“spring webmvc”,“spring test”和“parameters”以及在my master.jar文件的子项目依赖项中定义的另外两个jar文件

dependencies {
    compile project(':java_farm_core')

    compile group: 'org.springframework', name: 'spring-webmvc', version: "$springVersion"
    testCompile group: 'org.springframework', name: 'spring-test', version: "$springVersion"
    runtime group: 'com.fir.param', name: 'parameters', version: '1.0-nep'
    compile group: 'org.springframework', name: 'spring-beans', version: "$springVersion"
    compile 'commons-codec:commons-codec:1.9'
    compile group: 'com.fir.jide', name: 'jide-common', version: "$jideVersion"
    compile group: 'com.fir.jide', name: 'jide-grids', version: "$jideVersion"
    compile group: 'com.fir.jide', name: 'jide-charts', version: "$jideVersion"

    testCompile group: 'org.springframework', name: 'spring-oxm', version: "$springVersion"
    testCompile group: 'org.codehaus.castor', name: 'castor-xml', version: "1.3.1"
    testCompile 'org.easymock:easymock:3.1'

    runtime group: 'com.fir.param', name: 'parameters', version: '1.0-nep'


}

Peter Niederwieser,我使用了下面的脚本,但我遗漏了一些东西,它不起作用,下面这行代码引发了异常 来自reuterslibs.reuters.collect{zipTreeit}。我打算创建一个主jar文件,其中包含ext.reuterslibs中指定的jar文件中的所有类

出了什么问题: 评估根项目“workbench”时出现问题。 无法将提供的符号转换为File或URI:File集合。 支持以下类型/格式: 字符串或字符序列路径,例如'src/main/java'或'/usr/include' 字符串或字符序列URI,例如“file:/usr/include” 文件实例。 URI或URL实例。 ext.reuterslibs=[ 路透社:[文件jfl/reuters/ansi.jar,jfl/reuters/jDacsPrincipal.jar,jfl/reuters/jsfc_p2ps.jar ]]


这是一个有效的解决方案,现在我唯一关心的是,我想使用ext.jidelibs中指定的所有文件创建一个jar文件,ext.jidelibs在dependencies.gradle中定义,并使用apply from:$rootDir/dependencies.gradle应用于build.gradle,所以现在我不想将jidelib定义为配置,我想直接迭代ext.jidelibs中定义的文件,并创建包含ext.jidelibs中定义的jar文件的所有内容的主jar文件

ext.jidelibs = [
    jide: [
        files ("$jfl/jide/batik-awt-util.jar",
        "$jfl/jide/commons-collections-3.1.jar",
        "$jfl/jide/commons-logging.jar",
        "$jfl/jide/jide-charts.jar",
        "$jfl/jide/jide-action.jar"
                       )
    ]]


// task to generate signedJide.jar
task jideJar( type: Jar ) {
    duplicatesStrategy = 'exclude'
    baseName = 'Jide'
    from configurations.jidelib.collect {
        it.isDirectory() ? it : zipTree(it).matching {
           exclude "META-INF/*LICENSE*"
           // exclude "META-INF/*NOTICE*"
            //exclude "com/jidesoft/document/document.properties"
           } }
}


configurations {
    jidelib
}


dependencies {  
    jidelib jidelibs.jide
}

你所说的主Jar文件到底是什么意思?为什么你需要一个呢?在我们当前的ant i实现中,我们将所有与spring相关的Jar文件解压到一个目录中,将所有与jide相关的文件解压到另一个目录中,依此类推,然后,我们为每个逻辑组创建单独的主jar文件,即一个主jar文件包含所有jide相关类,另一个主jar文件包含所有spring相关类,这些类包含解压jar文件中的所有类,因此当我们交付代码时,我们交付4-5个签名的主jar文件,而不是100个签名的jar文件。
ext.jidelibs = [
    jide: [
        files ("$jfl/jide/batik-awt-util.jar",
        "$jfl/jide/commons-collections-3.1.jar",
        "$jfl/jide/commons-logging.jar",
        "$jfl/jide/jide-charts.jar",
        "$jfl/jide/jide-action.jar"
                       )
    ]]


// task to generate signedJide.jar
task jideJar( type: Jar ) {
    duplicatesStrategy = 'exclude'
    baseName = 'Jide'
    from configurations.jidelib.collect {
        it.isDirectory() ? it : zipTree(it).matching {
           exclude "META-INF/*LICENSE*"
           // exclude "META-INF/*NOTICE*"
            //exclude "com/jidesoft/document/document.properties"
           } }
}


configurations {
    jidelib
}


dependencies {  
    jidelib jidelibs.jide
}