2015-10-15 47 views
2

因此,这里是我的gradle这个脚本:我用gradle构建了一个包含我所有依赖项的胖罐子。现在,当使用distZip时,我该如何排除这些jar文件?

apply plugin: 'java' 
apply plugin: 'application' 

mainClassName = "com.company.diagnostics.app.client.AppMain" 

dependencies { 

    compile ('commons-codec:commons-codec:1.8') 
    compile (libraries.jsonSimple) 
    compile ('org.apache.ant:ant:1.8.2') 

    compile project(":app-common") 

    testCompile 'org.powermock:powermock-mockito-release-full:1.6.2' 

} 

jar { 

    archiveName = "app-client.jar" 

    from { 
     configurations.runtime.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 

     configurations.compile.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 

    manifest { 
     attributes 'Main-Class': 'com.company.diagnostics.app.client.AppMain"' 
    } 

    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF' 
} 

当这个版本,它产生可分配拉链,看起来像这样:

macbook-pro:distributions awt$ tree 
. 
├── app-client 
│   ├── bin 
│   │   ├── app-client 
│   │   └── app-client.bat 
│   └── lib 
│    ├── ant-1.8.2.jar 
│    ├── ant-launcher-1.8.2.jar 
│    ├── commons-codec-1.8.jar 
│    ├── app-client.jar 
│    ├── app-common.jar 
│    ├── guava-17.0.jar 
│    ├── jetty-2.0.100.v20110502.jar 
│    ├── json-simple-1.1.2.jar 
│    ├── osgi-3.7.2.v20120110.jar 
│    ├── services-3.3.0.v20110513.jar 
│    └── servlet-1.1.200.v20110502.jar 
└── app-client.zip 

因为我已经捆绑的依赖与JAR档案我自己的定制jar任务,我该如何防止distZip第二次捆绑这些jar文件?

- ant-1.8.2.jar 
- ant-launcher-1.8.2.jar 
- commons-codec-1.8.jar 
- guava-17.0.jar 
- jetty-2.0.100.v20110502.jar 
- json-simple-1.1.2.jar 
- osgi-3.7.2.v20120110.jar 
- services-3.3.0.v20110513.jar 
- servlet-1.1.200.v20110502.jar 

将它们捆绑到jar任务中的原因是,它原本是为了独立库。后来,它决定它应该有一个命令行界面(因此,分区和自动创建的Linux/Mac/Windows的包装脚本)。它仍然需要作为独立的fatjar存在,并将所有的依赖关系捆绑在一起。我只是不需要在/ libs中添加这个额外的东西。

我怎样才能得到distZip排除他们?

+0

你在混合两个插件。准备一个可运行的胖罐子或使用分配插件 - 这是它的工作原理。 – Opal

回答

3

您可以通过修改distZip任务,排除您不希望在分发存档库,如:

distZip { 
    exclude 'ant-1.8.2.jar' 
    exclude 'ant-launcher-1.8.2.jar' 
    exclude 'commons-codec-1.8.jar' 
    exclude 'guava-17.0.jar' 
    exclude 'jetty-2.0.100.v20110502.jar' 
    exclude 'json-simple-1.1.2.jar' 
    exclude 'osgi-3.7.2.v20120110.jar' 
    exclude 'services-3.3.0.v20110513.jar' 
    exclude 'servlet-1.1.200.v20110502.jar' 
} 

或可能是通过applicationDistribution,这对于整个应用程序插件提供的配置:

applicationDistribution.with { 
    exclude 'ant-1.8.2.jar' 
    exclude 'ant-launcher-1.8.2.jar' 
    exclude 'commons-codec-1.8.jar' 
    exclude 'guava-17.0.jar' 
    exclude 'jetty-2.0.100.v20110502.jar' 
    exclude 'json-simple-1.1.2.jar' 
    exclude 'osgi-3.7.2.v20120110.jar' 
    exclude 'services-3.3.0.v20110513.jar' 
    exclude 'servlet-1.1.200.v20110502.jar' 
} 

你可以尝试改变excludeinclude使较短的文件列表,或尝试绑定到排除的依赖列表可能。

+0

applicationDistribution.with正是我所需要的。 – AWT