Path Gradle工件依赖性-工件工件-如何找到路径
构建Java/Groovy项目时,各种任务(如compileJava、compileGroovy、test等)都需要各种jar构件,如果您已经正确定义了该任务的每个领域所需的内容,Gradle就会提供这些构件 我正在将它们提供给构建脚本(build.gradle),并且一切都很好Path Gradle工件依赖性-工件工件-如何找到路径,path,find,gradle,artifactory,resolve,Path,Find,Gradle,Artifactory,Resolve,构建Java/Groovy项目时,各种任务(如compileJava、compileGroovy、test等)都需要各种jar构件,如果您已经正确定义了该任务的每个领域所需的内容,Gradle就会提供这些构件 我正在将它们提供给构建脚本(build.gradle),并且一切都很好 我正在处理的另一个项目不仅需要jar事实,还需要一个.xml文件作为工件来进行JIBX/XSLT转换/处理 我的简单问题是: -Gradle构建过程知道如何从Artifactory(正如我在init.d/common
我正在处理的另一个项目不仅需要jar事实,还需要一个.xml文件作为工件来进行JIBX/XSLT转换/处理 我的简单问题是: -Gradle构建过程知道如何从Artifactory(正如我在init.d/common.Gradle文件中提到的那些Artifactory存储库)获取工件,并且在构建过程中,它使用这些JAR为编译/测试等任务提供信息,现在如果我也将这个.xml工件上传到Artifactory,那么: a。如何在build.gradle中获得可用的.xml工件,以便对其执行一些操作;例如:将该.xml文件复制到结果项目的jar/war文件中的x/y/z文件夹中。这些jar文件我可以通过project.configurations.compile.each或.find或类似的方式访问,但我不确定是否可以以同样的方式访问.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将工件保存在用户的缓存中(home directory in ~/.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"
}
似乎我必须首先将.xml从Gradle知道它可用的地方复制到某个位置,然后从该位置复制到我的目标文件夹
// 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
}
}
}
}
最简单的解决方案是将XML文件提交给源代码管理。如果将它放在
src/main/webapp/WEB-INF/conf/thatxmlartifactfile.xml
下,它将自动包含在War中
如果需要从Artifactory获取文件,可以按如下操作:
configurations {
jibx
}
dependencies {
jibx "some.group:someArtifact:1.0@xml"
war {
from { configurations.jibx.singleFile }
}
PS:通常情况下,直接将文件添加到最终归档中是可能的,而且更可取,而不是经过中间复制步骤。我同意皮特的观点,这就是答案——对我来说是长期的。我们计划在项目的jar文件中包含该.xml,这样一旦该jar被取消共享,我就可以通过“build/tmpJibx/jarfolder/conf”并包含“file.xml”来获取它。但同时,我也很好奇,因为我们有很多项目的jar被其他项目使用,它们也会生成这样的.xml/etc文件,这些文件也会被使用。长期的解决方案是在.jar中包含所有这样的文件,当我们需要它时,我们就有了它。我也试试你说的。你同意我上次的更新(帖子的底码)吗?你的代码太复杂了。请参阅我的答案,以获得更简单的解决方案。同意,但我将其用于其他目的,即处理所有.xxx工件。但是你提到的.xml对我来说很有意义。谢谢,皮特。嘿,皮特,什么是singleFile。你的意思是我必须使用thatxmlartifactfile来代替你在war任务中提到的singleFile关键字吗?你应该按原样使用代码。这是在调用
配置#getSingleFile
。有关详细信息,请参阅。
configurations {
jibx
}
dependencies {
jibx "some.group:someArtifact:1.0@xml"
war {
from { configurations.jibx.singleFile }
}