Java 按需在Gradle中制作无脂罐

Java 按需在Gradle中制作无脂罐,java,gradle,jar,Java,Gradle,Jar,我在用Gradle。通常我是在造肥罐子。没有问题,但在这个时候,我还需要做一个不含脂肪的罐子。 我的意思是我想排除所有依赖的库,并使用-cp选项运行jar,如下所示: java-cp”/sample1/lib/myjar.jar:/sample2/lib/dependent.jar“com.example.main.Runner (在FAT jar中,java-jar myjar.jar是同一个东西,它包含dependent.jar) 这是我的build.gradle apply plugin:

我在用Gradle。通常我是在造肥罐子。没有问题,但在这个时候,我还需要做一个不含脂肪的罐子。 我的意思是我想排除所有依赖的库,并使用
-cp
选项运行jar,如下所示:

java-cp”/sample1/lib/myjar.jar:/sample2/lib/dependent.jar“com.example.main.Runner

(在FAT jar中,
java-jar myjar.jar
是同一个东西,它包含
dependent.jar

这是我的
build.gradle

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

jar.baseName = 'myjar'
version = ''
def mainClass = 'com.example.main.Runner'
mainClassName =  mainClass

def defaultEncoding = 'UTF-8'

repositories {
  flatDir dirs: "${projectDir}/libs"
}

dependencies {
  compile ':commons-chain:1.2'
  compile ':commons-io:2.4'

  testCompile ':junit:4.12'
  testCompile ':hamcrest-core:1.3'
}
jar {
  manifest {
      attributes 'Implementation-Version': version,
                 'Main-Class': mainClass
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
我还是想把这个留着做普通的胖罐子。 因此,我尝试附加一个任务,如下所示:

试试看

试试看

试试看

在附加它之后,我运行了
gradlemakeslimjar
。 我上面的所有尝试都失败了(以编程方式,成功了),只创建了名为
myjar.slim.jar
的胖jar

有没有办法在同一个
build.gradle
文件中同时使用胖jar和非胖jar? ... 还是我做错了什么

我认为删除<代码>应用插件:“应用程序”< /代码>是我的最后一招。 如果可以的话,请帮助我


谢谢,

将依赖项添加到jar的代码如下:

from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
默认情况下,您的构建脚本通常会构建一个“slim jar”,除非您添加了代码来覆盖此行为:

jar {
  manifest {
  attributes 'Implementation-Version': version,
             'Main-Class': mainClass
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
我建议删除这些行。当您运行
gradleclean build
时,这将构建一个正常的jar(没有依赖项)

然后,您可以添加一个额外的任务来创建“fatjar”,如下所示:

task fatjar << {
    jar.doFirst {
       println "creating fatjar"
       jar {
         from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
       }
    }
}

task fatjar感谢您的回答。根据您的建议,我删除了
jar{}
部分,并添加了
fatjar
任务。它工作得很好!非常感谢。请注意,最近far jar在一些社区被称为uber jar。见:
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
jar {
  manifest {
  attributes 'Implementation-Version': version,
             'Main-Class': mainClass
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
task fatjar << {
    jar.doFirst {
       println "creating fatjar"
       jar {
         from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
       }
    }
}