gpt4 book ai didi

gradle - 使用Gradle将多个现有JAR上载到Maven存储库

转载 作者:行者123 更新时间:2023-12-04 04:18:56 25 4
gpt4 key购买 nike

我需要实现一个Gradle任务,该任务会将多个现有的JAR上载到Maven存储库。

棘手的部分是,JAR列表事先未知。我希望它的工作方式是先下载某些“.tar.gz”文件,将其解压缩,然后扫描JAR并使用某种命名约定上载它们(例如,将JAR名称用作artifactId和.tar版本。 gz版本)。

用Gradle做到这一点最简单的方法是什么?当前,它是一个简单的bash脚本,用于搜索JAR并为每个JAR运行Maven deploy:deploy-file,但是我需要将该功能合并到gradle构建脚本中。

理想情况下,我需要像“deployJars”这样的任务,该任务可以上传所有内容并依赖于“downloadTarGz”任务。

更新:

上载没有任何JAR的POM怎么样?我需要生成几个依赖于这些动态检测到的JAR的POM,并将它们上传。 “工件”要求我指定要上传的文件。

最佳答案

要通过gradle上传jar,您必须将该jar声明为发布工件,并使用artifacts闭包将其添加到特定配置中:

apply plugin:'maven'

configurations{
allJars
}

artifacts{
allJars file("path/to/jarFile.jar")
}

现在,您可以配置动态创建的uploadAllJars任务:
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://localhost:8081/artifactory/acme') {
authentication(userName: 'admin', password: 'password');
}
}
}

问题是您要上传多个工件。为了实现这一点,您需要在构建脚本中增加一些动态性。可以将所有发现的jar的publishartifacts的动态创建包装在一个任务中。在我的示例中,discoverAllJars任务只是在指定的文件夹中查找jar文件。在这里,您需要实现自己的逻辑以在tgz归档文件中查找jar。
group = "org.acme"
version = "1.0-SNAPSHOT"

task discoverAllJars{
ext.discoveredFiles = []
doLast{
file("jars").eachFile{file ->
if(file.name.endsWith("jar")){
println "found file ${file.name}"
discoveredFiles << file
artifacts{
allJars file
}
}
}
}
}

为了能够在uploadAllJars任务中上载多个工件,您必须使用pom过滤器。有关pom过滤器的详细信息,请参阅 http://www.gradle.org/docs/current/userguide/maven_plugin.html#uploading_to_maven_repositories上的gradle用户指南。

由于我们将已发布工件的配置移至gradle的执行阶段,因此我们也必须在执行阶段配置uploadAllJars。因此,我将创建一个configureUploadAllJars任务。注意我们如何引用使用'discoverAllJars.discoveredFiles'发现的jar文件:
 task configureUploadAllJars{
dependsOn discoverAllJars
doLast{
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://yourrepository/') {
authentication(userName: 'admin', password: 'password');
}
discoverAllJars.discoveredFiles.each{discoveredFile ->
def filterName = discoveredFile.name - ".jar"
addFilter(filterName) { artifact, file ->
file.name == discoveredFile.name
}
pom(filterName).artifactId = filterName
}
}
}
}
}
}

现在,您只需要在uploadAllJars和configureUploadAllJars之间添加一个依赖项:
uploadAllJars.dependsOn configureUploadAllJars    

本示例对所有发现的jar文件使用相同的组和版本,并且jar名称为artifactId。您可以根据需要使用pom过滤器机制进行更改。

希望能有所帮助,

干杯,
雷内

关于gradle - 使用Gradle将多个现有JAR上载到Maven存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com