首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按需制作脱脂罐

按需制作脱脂罐
EN

Stack Overflow用户
提问于 2016-08-30 10:28:17
回答 1查看 3.5K关注 0票数 3

我在用Gradle。通常是我做的肥肉罐。没有问题,但在这个时候,我也需要做脱脂罐.我的意思是,我希望排除所有依赖的库,并使用-cp选项运行jar,如下所示:

java -cp "/sample1/lib/myjar.jar:/sample2/lib/depended.jar" com.example.main.Runner

(在FAT jar中,java -jar myjar.jar是相同的,它包含depended.jar)

这是我的build.gradle

代码语言:javascript
复制
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) }}
}

我还是想留着这个做个胖罐子。因此,我试图添加如下任务:

尝试#1

代码语言:javascript
复制
task makeSlimJar {
  jar.baseName = 'myjar.slim'
  jar {
  manifest {
      // remove main class
      attributes 'Implementation-Version': version
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}

尝试#2

代码语言:javascript
复制
task makeSlimJar {
  jar.baseName = 'myjar.slim'  
  jar {
  manifest {
      // remove main class
      attributes 'Implementation-Version': version
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}

  tasks.Jar.execute()
}

尝试#3

代码语言:javascript
复制
task makeSlimJar {
  jar.baseName = 'myjar.slim'
  jar {
  manifest {
      // remove main class
      attributes 'Implementation-Version': version
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
  dependsOn Jar 
}

在追加之后,我运行了gradle makeSlimJar。我所有的尝试都失败了(通过编程,它成功了),只创建了一个名为myjar.slim.jar的胖jar。

有办法在同一个build.gradle文件上一起生活吗?还是我出了什么问题?

我认为去除apply plugin: 'application'的脱脂罐是我最后的选择。

如果可以的话,请帮帮我。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 11:52:29

实际上,将依赖项添加到jar的代码如下所示:

代码语言:javascript
复制
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}

默认情况下,构建脚本通常会构建一个“瘦jar”,只不过添加了一些代码来覆盖这种行为:

代码语言:javascript
复制
jar {
  manifest {
  attributes 'Implementation-Version': version,
             'Main-Class': mainClass
  }
  from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}

,我建议删除这些行,。当您运行gradle clean build时,它将构建一个普通的jar (没有依赖项)。

然后,您可以添加一个额外的任务来创建这样的“fatjar”:

代码语言:javascript
复制
task fatjar << {
    jar.doFirst {
       println "creating fatjar"
       jar {
         from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
       }
    }
}

您可以通过运行gradle clean fatjar build来使用此任务构建fatjar。

或者,您可以尝试查看一个框架,比如springboot,它将为您完成所有这些工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39225022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档