如何解决在Gradle中,是否有“正确的方式”来产生瘦弱的战争和耳钉
|| 我想使用Gradle(显然是Java)来进行一场瘦小的战争(战争中没有依赖罐),并将所有依赖项包含在ear文件中。我已经进行了一些挖掘,但是找不到Gradle的任何明显的“瘦身战争”教程。 在Maven 2.2.1中(是的,我们陷在2.2.1中,不要问我为什么),这是通过创建一个单独的ear项目并在耳朵中重复我所有与子项目的依赖关系来实现的。 我可以想象如何在Gradle中复制相同的hack,但是我希望有一种更聪明的方式来做到这一点。有没有人有任何想法/示例/建议?解决方法
gradle的最新1.0-M4快照包含新的Ear插件。您可以更新包装器配置,也可以直接从下载快照
http://repo.gradle.org/gradle/distributions/gradle-snapshots/gradle-1.0-milestone-4-20110610162713+0200-bin.zip
可从http://repo.gradle.org/gradle/distributions/gradle-snapshots/gradle-1.0-milestone-4-20110610162713+0200-all.zip下载此快照的完整发行版,其中包含一个示例文件夹,其中包含两个示例用法新推出的耳塞。
看一下samples / ear / earWithWar中的示例此示例定义了带有战争的耳朵。
要进行一场枯燥的战争,您必须修改war项目的build.gradle。要在没有第三方库的情况下进行战争,您必须将以下代码段添加到sample / ear / earWithWar / war / build.gradle:
war{
classpath = []
}
为了在您的耳朵的lib /子文件夹中获得第三方库,您还必须将war插件使用的库也添加到根项目的earlib配置中。该示例对log4j库执行此操作。
现在,在示例项目上运行\“ gradle ear \”,创建了一场枯燥的战争,并且第三方libs存储在ear的lib /子文件夹中。
完整的快照在docs /子文件夹中包含有关耳插件的更多文档
, Rene建议您将ѭ1设置为1可以防止所有内容被包含-最终存档中甚至不包含WEB-INF/classes
。我知道从war文件的WEB-INF/lib
目录中排除依赖项,但仍包括WEB-INF/classes
的唯一方法是使用providerCompile和/或providerRuntime配置。例如
dependencies {
providedCompile fileTree(dir: \'lib\',include: \'**/*.jar\')
}
, 我将尝试着手进行快照构建,但是为了完整起见,这是自昨天以来我如何一起砍弄东西。请随时改善我的Gradle / Groovy。我敢肯定它没有它应该的优雅。
//Make sure the war and jars get built first
task (\'ear\',type:Jar,dependsOn: \":myWarProject:assemble\" ){
//This needs to be in the config block,or Gradle skips the task,assuming the file list for the jar/ear is empty...
from{ \"ear/src/main/application\" }
}
ear.doFirst{
//Set up the ear file name
baseName = \"myapp-\" + rootVersion
extension = \"ear\"
//Gather up the jars required by all of the subprojects
def allSubprojectDependencies = getAllProjectDependencies([
\"subproject1\",\"subproject2\",\"subproject3\",\"subproject4\",\"subproject5\"
])
from { allSubprojectDependencies }
//grab the assembled war file
from {
subprojects.find{ it.name==\"myWarFile\" }.war.archivePath
}
//Other stuff required for our ear,such as security or eventing EJBs
//Make sure you apply your \"repositories\" block to your root/ear project or \"allProjects\" if you do this...
from { configurations.earConfig.files }
//Create the classpath manifest
manifestClassPath = allSubprojectDependencies.collect { it.name }.sort().join(\' \')
manifest { attributes( \"Class-Path\": manifestClassPath ) }
}
def getAllProjectDependencies (def projectNames){
def allDependencies = []as Set
projectNames.each{ projectName ->
def subProject = subprojects.find{ subProject ->
subProject.name.equals(projectName)
}
def subProjectDependencies = subProject.configurations.compile.files
allDependencies.addAll subProjectDependencies
}
return allDependencies.unique{ a,b->
if (a.equals(b)){
return 0
}
return -1
}
}
(请注意,所有的罐子都是故意放在耳朵根部的。不要问我为什么,但是有些人显然喜欢这种方式。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。