Gradle善良:仅添加包装用于战争
我的同事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善良:仅添加包装用于战争相关推荐
- 摇篮善良:仅添加包装用于战争
我的同事Tom Wetjens 在Maven中撰写了博客文章仅打包依赖项 . 当我们想在WAR文件中包含依赖项时,他展示了一种Maven解决方案,而在其他任何作用域中都没有使用. 在这篇博客中,我们将 ...
- 是否可以在Gradle中声明一个可用于Java的变量?
本文翻译自:Is it possible to declare a variable in Gradle usable in Java? Is it possible to declare a var ...
- 如何在gradle上仅运行一个测试类
本文翻译自:How to run only one test class on gradle I am new to Gradle. 我是Gradle的新手. I use Gradle 1.10 an ...
- Gradle善良:获得更多的依赖性见解
在我们的大多数项目中,我们都依赖于其他代码,例如库或其他项目. Gradle有一个不错的DSL来定义依赖关系. 依赖性在依赖性配置中分组. 这些配置可以自己创建,也可以通过插件添加. 一旦定义了依赖项 ...
- Vue,简洁方式开发web,仅添加vue.js文件,不使用全家桶
index.html主页引入main.js main.js引入App.js 也就是套娃--简单的不要不要的 index.html里面引入文件[注意这里有个div id ="app" ...
- 关于Android Studio Arctic Fox 无法在 build.gradle(Project) 中添加第三方Maven仓库的解决方案
问题描述 在 Android Studio Arctic Fox 版本中创建项目,原本应该在 build.gradle(Project) 中配置第三方 Maven 仓库,手动配置后居然报错: 1: T ...
- 实时录制视频,实时去除人_录制实时演示,第2部分:软件设置
实时录制视频,实时去除人 如果您是进行现场会议的团队的一员,则有可能要录制发言人的演讲并在网上发布. 幸运的是,这要归功于开源软件和现成的硬件,这在今天是容易且相对便宜的. 有关录制实时演示文稿的本系 ...
- 将$type添加到System.Text.Json序列化中,就像Newtonsoft那样用于动态对象属性
目录 介绍 用户故事5:在System.Text.Json JsonSerializer中支持动态类型 演示项目和测试 修改模型方法 包装方法 总结 Pro Coders团队最近将一个大型项目从New ...
- Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)
Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...
最新文章
- linux 主进程 等待,Linux启动与进程
- 2016.5.57—— Remove Duplicates from Sorted List
- visual studio code 修改工具栏风格
- 【STM32】GPIO之按键
- Python对象基础
- 10天学安卓-第九天
- BUAA 更大公约数
- ipv6地址格式_IPV6与IPV4的差异
- positional encoding位置编码详解:绝对位置与相对位置编码对比
- PP视频如何更改截图保存路径及图片类型
- 16 CO配置-控制-产品成本控制-产品成本计划编制-定义成本构成结构
- C语言--第2次作业
- html页面色块布局代码,Html 实现动态显示颜色块的报表效果(实例代码)
- 真正优秀的人是如何度过假期的
- 注册测绘师备考指南2019
- 几种数字仿真的物理意义与代码实现
- echarts柱状图及阴影偏移
- python查两个微博共同粉丝_Python:获取新浪微博用户的收听列表和粉丝列表
- 英语数字转换器(POJ NO.1123)
- 执行SOA ——SOA实践指南