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

我的同事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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页端调用企业微信扫一扫 详细过程

效果展示(需要使用微信内置浏览器打开): 目录 1. 快速集成H5开发应用 1.1 开始 1.2 创建应用 1.2.1 登录管理后台 1.2.2 添加自建应用 1.2.3 配置应用 1.2.4 获取应用的 AgentID 与 Secret 1.3 配置应用 1.3.1 配置应用主页 1.3.2 配置…

获取ip地址

代码 ///<summary>///取得客户端真实IP。如果有代理则取第一个非内网地址 ///</summary>publicstringIPAddress { get{ stringresult String.Empty; result HttpContext.Current.Request.ServerVariables["HTTP_X_FORWAR…

Oracle DBA 学习总结

对于学习Oracle 数据库&#xff0c;应该先要了解Oracle 的框架。它有物理结构&#xff08;由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成&#xff09; &#xff0c;逻辑结构&#xff08;表空间、段、区、块&#xff09;&#xff0c;内存分配&#xff…

lodash round

_.round(number, [precision0])根据 precision 四舍五入 number。 _.round(4.006);// > 4_.round(4.006, 2);// > 4.01_.round(4060, -2);// > 4100 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

可怕的DefaultAbstractHelperImpl

不久前&#xff0c;我们发布了这个有趣的游戏&#xff0c;我们称之为Spring API Bingo 。 当形成有意义的类名时&#xff0c;它是对Spring的巨大创造力的赞美和奉承。 FactoryAdvisorAdapterHandlerLoader ContainerPreTranslatorInfoDisposable BeanFactoryDe​​stination…

微信小程序 监听位置信息

wx.onLocationChange(function callback) | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html 小程序 获取当前城市位置-高德地图_Start2019-CSDN博客小程序获取位置信息&#xff0c;包括省市区、用户…

通过构建Cocoapods私有库进行组件化开发探索

专题一 一、创建私有索引库 选Github或者码云都可以&#xff0c;本例以Github为例。创建私有索引库用来作为自己组件库的索引&#xff1a; 二、本地添加私有索引库 添加&#xff1a;pod repo add 索引库名称 索引库地址 例&#xff1a;pod repo add ZYHModule https://github.c…

lodash 数组元素查找 findIndex

_.findIndex(array, [predicate_.identity])这个方法类似 _.find。除了它返回最先通过 predicate 判断为真值的元素的 index &#xff0c;而不是元素本身。<!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta …

layui 父页面弹框中获取子页面的内容

layer弹层组件开发文档 - Layuihttps://www.layui.site/doc/modules/layer.html#layer.getChildFrame 需求及代码分析 如上图&#xff0c;原来是点击一个按钮跳转到子页面&#xff0c;现在想改为&#xff1a;点击按钮&#xff0c;在当前页打开。因为不想要重写子页面的样式及内…

在JBoss Fuse / Fabric8 / Karaf中使用Byteman

您是否曾经尝试过了解一些非常简单的方法不起作用的过程&#xff1f; 您正在任何众所周知的上下文中编写代码&#xff0c;无论出于何种原因它都无法正常工作。 而且您信任您的平台&#xff0c;因此您认真阅读了所有日志。 而且&#xff0c;您仍然不知道为什么某些行为不符合预…

个人作业——Alpha项目测试

一、 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3338 团队名称 西柚皇家编程团队&#xff1a;https://www.cnblogs.com/TakeRa…

HttpURLConnection的警告

这段代码对您来说还不错吗&#xff1f; HttpURLConnection connection null; try {connection (HttpURLConnection) url.openConnection();try (InputStream in url.getInputStream()) {return streamToString(in);} } finally {if (connection ! null) connection.disconn…

LeapFTP 注册码

LeapFTP v2.7.6.613 汉化版II 特别版Name:crsky Code:214065-658136565http://www.crsky.com/soft/664.htmlLeapFTP v2.7.6.613 英文版http://www.crsky.com/soft/378.htmlName:crsky Code:214065-658136565------------LeapFTP 2.7.6.613 汉化版软件类别&#xff1a;汉化补丁/…

Windows7下Docker的安装

转自 https://blog.csdn.net/xiangxiezhuren/article/details/79698913 无法打开图3&#xff0c;打开属性。给其添加git路径 无法使用图2下载 https://www.cnblogs.com/huang-yc/p/10350408.html 转载于:https://www.cnblogs.com/shufeiyang/p/11016177.html

简而言之,JUnit:单元测试断言

简而言之&#xff0c;本章涵盖了各种单元测试断言技术。 它详细说明了内置机制&#xff0c; Hamcrest匹配器和AssertJ断言的优缺点 。 正在进行的示例扩大了该主题&#xff0c;并说明了如何创建和使用自定义匹配器/断言。 单元测试断言 信任但要验证 罗纳德里根&#xff08;R…

vue 安装使用mockjs

使用 mockjs 的案例过程&#xff1a; 1. 安装 npm install axios -S npm install mockjs --save-dev npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置_jwl_willon的博客-CSDN博客_npm save备注&#xff1a;<> 意为等价于&#xff1b;1、npm install …

vue 总结

1、尽量不操作dom 使用数据双向绑定 2、使用指令 如:title 不是title 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

OpenFileDialog 类的ShowDialog() 错误的解决

首先&#xff0c;一个类里&#xff0c;有个linkLabel1 private OpenFileDialog openFileDialog1;private DialogResult result; private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { openFileDialog1 new OpenFileDialog(); …

大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计

1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [rootmini3 kafka]# bin/kafka-console-producer.sh --broker-list mini1:9092 --topic cyf-test 程序代码 package org.apache.sparkimport java.net.InetSocketAddressimport org.apache.spark.HashParti…

日期/时间格式/解析,Java 8样式

自Java 几乎 开始以来&#xff0c;Java开发人员就通过java.util.Date类&#xff08;自JDK 1.0起&#xff09;和java.util.Calendar类&#xff08;自JDK 1.1起 &#xff09;来处理日期和时间。 在这段时间内&#xff0c;成千上万&#xff08;甚至可能数百万&#xff09;的Java开…