构建Java / Groovy项目时,各种任务(如compileJava,compileGroovy,test等)需要各种jar工件,如果您已正确定义了该任务的每个区域所需的内容,Gradle会提供这些工件。
我正在将这些可用于构建脚本(build.gradle),一切正常。
我正在处理的另一个项目,不仅需要jar rtifacts,还需要.xml文件作为进行JIBX / XSLT转换/处理的工件。
我的简单问题: - Gradle构建过程知道如何从Artifactory获取工件(正如我在init.d / common.gradle文件中提到的那些Artifactory存储库),并且在构建期间它将这些jar的编译/测试等任务提供给它们,现在如果我有这个.xml工件也上传到Artifactory,然后:
一个。如何在build.gradle中获取.xml工件,以便我可以对其执行某些操作;例如:将.xml文件复制到结果项目的jar / war文件中的x / y / z文件夹中。我可以通过 project.configurations.compile.each或.find 或类似的东西访问那些jar文件,但我不确定我是否可以以相同的方式访问.xml文件。以下代码适用于在build / tmpJibx /文件夹中解压缩jar文件,即如果我在构建期间需要httpunit-1.1.1.jar,则调用时的以下函数将在build / tmpJibx / httpunit中创建/解压这个jar夹。
// Unpack jar
def unpackJarItem( jarName ) {
println 'unpacking: ' + jarName
def dirName = "$buildDir/tmpJibx/$jarName"
new File( dirName ).mkdirs()
project.configurations.compile.find {
def nameJar = it.name
def iPos = nameJar.lastIndexOf( '-' )
if( iPos > 0 ) {
nameJar = nameJar.substring( 0, iPos )
if( nameJar == jarName ) {
def srcJar = it.toString()
ant {
unjar( src: "$srcJar", dest: "$dirName" )
}
}
}
}
}
Gradle在其缓存中维护用户的〜(主目录〜/ .gradle)或C:\ Users \ .gradle下的文件...... \ caches .. \ artifactory .. \ filestore ....... .. *
所有我想要实现的是: 如果我可以做以下的事情:
copy {
into "build/war/WEB-INF/conf"
from "......<THIS_PATH_IS_WHAT_Im_LOOKING_FOR>:
include "thatxmlartifactfile.xml"
}
我尝试在依赖项{...}部分下定义条目,如下所示,但我不确定Gradle是否会以某种方式自动访问它,因为Gradle太棒了。
dependencies {
compile 'groupid:artifactid:x.x.x'
compile group: 'xxxx', artifac...: 'yyyy', version: 'x.x.x'
//for ex:
compile 'httpunit:httpunit:1.1.1'
jibxAnt 'groupidnameofxmlfile:artifactidnameofxmlfile:versionnumberofxml@xml"
...
...
....
}
似乎我必须首先复制.xml,从Gradle知道它可用于某个位置n然后从该位置到我的目标文件夹。
// Add libraries for acceptance tests
project.configurations.acceptanceTestCompile.each { File f ->
if( f.isFile() ) {
def nameJar = f.getName()
def jarName = f.getName()
def fileInc = true
def iPos = nameJar.lastIndexOf( '-' )
if( iPos > -1 ) {
jarName = nameJar.substring( 0, iPos )
// Here I can say that one of the file/entry will be that .xml file
// Now I have that in jarName variable and I can play with it, right?
// i.e. if jarName == name of that xml file, then
copy {
into "some/folder/location"
from jarName
}
}
}
}
答案 0 :(得分:3)
最简单的解决方案是将XML文件提交到源代码管理。如果你把它放在src/main/webapp/WEB-INF/conf/thatxmlartifactfile.xml
下面,它将自动包含在战争中。
如果您需要从Artifactory获取文件,您可以按照以下步骤操作:
configurations {
jibx
}
dependencies {
jibx "some.group:someArtifact:1.0@xml"
war {
from { configurations.jibx.singleFile }
}
PS:通常可以,也更可取的是,将文件直接添加到最终存档,而不是通过中间复制步骤。