我的同事Tom Wetjens 在Maven中撰写了博客文章仅打包依赖项 。 当我们想在WAR文件中包含依赖项时,他展示了一种Maven解决方案,而在其他任何作用域中都没有使用。 在这篇博客中,我们将看到我们如何在Gradle中解决这个问题。

假设我们在项目中使用SLF4J Logging API。 我们将API用作编译依赖项,因为我们的代码使用此API。 但是在我们的测试运行时中,我们想使用此API的SLF4J Simple实现。 并且在我们的WAR文件中,我们希望包括API的Logback实现。 Logback依赖关系仅需要包含在WAR文件中,并且不应存在于任何其他依赖关系配置中。

我们首先将War插件添加到我们的项目中。 war任务使用runtime依赖项配置来确定将哪些文件添加到WAR文件中的WEB-INF/lib目录中。 我们添加了新的依赖项配置warLib ,以扩展项目中的runtime配置。

apply plugin: 'war'repositories.jcenter()configurations {// Create new dependency configuration// for dependencies to be added in // WAR file.warLib.extendsFrom runtime
}dependencies {// API dependency for Slf4j.compile 'org.slf4j:slf4j-api:1.7.7'testCompile 'junit:junit:4.11'// Slf4j implementation used for tests.testRuntime 'org.slf4j:slf4j-simple:1.7.7'// Slf4j implementation to be packaged// in WAR file.warLib 'ch.qos.logback:logback-classic:1.1.2'
}war {// Add warLib dependency configurationclasspath configurations.warLib// We remove all duplicate files// with this assignment.// geFiles() method return a unique// set of File objects, removing// any duplicates from configurations// added by classpath() method.classpath = classpath.files
}

现在,我们可以运行build任务,并获得包含以下内容的WAR文件:

$ gradle build
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war
:assemble
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:buildBUILD SUCCESSFULTotal time: 6.18 secs
$ jar tvf build/libs/package-only-dep-example.war0 Fri Sep 19 05:59:54 CEST 2014 META-INF/25 Fri Sep 19 05:59:54 CEST 2014 META-INF/MANIFEST.MF0 Fri Sep 19 05:59:54 CEST 2014 WEB-INF/0 Fri Sep 19 05:59:54 CEST 2014 WEB-INF/lib/29257 Thu Sep 18 14:36:24 CEST 2014 WEB-INF/lib/slf4j-api-1.7.7.jar
270750 Thu Sep 18 14:36:24 CEST 2014 WEB-INF/lib/logback-classic-1.1.2.jar
427729 Thu Sep 18 14:36:26 CEST 2014 WEB-INF/lib/logback-core-1.1.2.jar115 Wed Sep 03 09:24:40 CEST 2014 WEB-INF/web.xml

同样,当我们运行dependencies任务时,我们可以看到SLF4J API的实现与依赖项配置之间的关系:

$ gradle dependencies
:dependencies------------------------------------------------------------
Root project
------------------------------------------------------------archives - Configuration for archive artifacts.
No dependenciescompile - Compile classpath for source set 'main'.
\--- org.slf4j:slf4j-api:1.7.7default - Configuration for default artifacts.
\--- org.slf4j:slf4j-api:1.7.7providedCompile - Additional compile classpath for libraries that should not be part of the WAR archive.
No dependenciesprovidedRuntime - Additional runtime classpath for libraries that should not be part of the WAR archive.
No dependenciesruntime - Runtime classpath for source set 'main'.
\--- org.slf4j:slf4j-api:1.7.7testCompile - Compile classpath for source set 'test'.
+--- org.slf4j:slf4j-api:1.7.7
\--- junit:junit:4.11\--- org.hamcrest:hamcrest-core:1.3testRuntime - Runtime classpath for source set 'test'.
+--- org.slf4j:slf4j-api:1.7.7
+--- junit:junit:4.11
|    \--- org.hamcrest:hamcrest-core:1.3
\--- org.slf4j:slf4j-simple:1.7.7\--- org.slf4j:slf4j-api:1.7.7warLib
+--- org.slf4j:slf4j-api:1.7.7
\--- ch.qos.logback:logback-classic:1.1.2+--- ch.qos.logback:logback-core:1.1.2\--- org.slf4j:slf4j-api:1.7.6 -> 1.7.7(*) - dependencies omitted (listed previously)BUILD SUCCESSFULTotal time: 6.274 secs

用Gradle 2.1编写的代码。

翻译自: https://www.javacodegeeks.com/2014/09/gradle-goodness-adding-dependencies-only-for-packaging-to-war.html

Gradle善良:仅添加包装用于战争相关推荐

  1. 摇篮善良:仅添加包装用于战争

    我的同事Tom Wetjens 在Maven中撰写了博客文章仅打包依赖项 . 当我们想在WAR文件中包含依赖项时,他展示了一种Maven解决方案,而在其他任何作用域中都没有使用. 在这篇博客中,我们将 ...

  2. 是否可以在Gradle中声明一个可用于Java的变量?

    本文翻译自:Is it possible to declare a variable in Gradle usable in Java? Is it possible to declare a var ...

  3. 如何在gradle上仅运行一个测试类

    本文翻译自:How to run only one test class on gradle I am new to Gradle. 我是Gradle的新手. I use Gradle 1.10 an ...

  4. Gradle善良:获得更多的依赖性见解

    在我们的大多数项目中,我们都依赖于其他代码,例如库或其他项目. Gradle有一个不错的DSL来定义依赖关系. 依赖性在依赖性配置中分组. 这些配置可以自己创建,也可以通过插件添加. 一旦定义了依赖项 ...

  5. Vue,简洁方式开发web,仅添加vue.js文件,不使用全家桶

    index.html主页引入main.js main.js引入App.js 也就是套娃--简单的不要不要的 index.html里面引入文件[注意这里有个div id ="app" ...

  6. 关于Android Studio Arctic Fox 无法在 build.gradle(Project) 中添加第三方Maven仓库的解决方案

    问题描述 在 Android Studio Arctic Fox 版本中创建项目,原本应该在 build.gradle(Project) 中配置第三方 Maven 仓库,手动配置后居然报错: 1: T ...

  7. 实时录制视频,实时去除人_录制实时演示,第2部分:软件设置

    实时录制视频,实时去除人 如果您是进行现场会议的团队的一员,则有可能要录制发言人的演讲并在网上发布. 幸运的是,这要归功于开源软件和现成的硬件,这在今天是容易且相对便宜的. 有关录制实时演示文稿的本系 ...

  8. 将$type添加到System.Text.Json序列化中,就像Newtonsoft那样用于动态对象属性

    目录 介绍 用户故事5:在System.Text.Json JsonSerializer中支持动态类型 演示项目和测试 修改模型方法 包装方法 总结 Pro Coders团队最近将一个大型项目从New ...

  9. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

最新文章

  1. linux 主进程 等待,Linux启动与进程
  2. 2016.5.57—— Remove Duplicates from Sorted List
  3. visual studio code 修改工具栏风格
  4. 【STM32】GPIO之按键
  5. Python对象基础
  6. 10天学安卓-第九天
  7. BUAA 更大公约数
  8. ipv6地址格式_IPV6与IPV4的差异
  9. positional encoding位置编码详解:绝对位置与相对位置编码对比
  10. PP视频如何更改截图保存路径及图片类型
  11. 16 CO配置-控制-产品成本控制-产品成本计划编制-定义成本构成结构
  12. C语言--第2次作业
  13. html页面色块布局代码,Html 实现动态显示颜色块的报表效果(实例代码)
  14. 真正优秀的人是如何度过假期的
  15. 注册测绘师备考指南2019
  16. 几种数字仿真的物理意义与代码实现
  17. echarts柱状图及阴影偏移
  18. python查两个微博共同粉丝_Python:获取新浪微博用户的收听列表和粉丝列表
  19. 英语数字转换器(POJ NO.1123)
  20. 执行SOA ——SOA实践指南

热门文章

  1. P4130,jzoj1214-[NOI2007]项链工厂【线段树】
  2. 学习手记(2018/7/14~2018/7/18)——快乐纪中
  3. P1892-团伙【图论,并查集】
  4. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Cities(区间dp)
  5. 公共子串 字符串哈希
  6. 一个非常好的依存句法可视化工具
  7. 程序员如何写简历?来自硅谷的八条建议
  8. vue.js 接收url参数
  9. 服务高可用:幂等性设计
  10. SpringAOP的Aspectj方式*