当前位置: 首页 > 知识库问答 >
问题:

发布(rootproject)pom没有(rootproject)发布工件/打包=pom

顾俊哲
2023-03-14

我正在将我们的一个项目从maven迁移到gradle:这是一个gradle多项目

然而,传统的(基于maven的)构建环境也期望根项目发布一个pom文件,其“打包”节点等于“pom”(看起来是maven的常见行为)

所以现在,我试图让Gradle生成这个,但只找到为每个工件自定义自动生成的pom的方法,我找不到一种方法来生成/上传一个pom而不发布一个实际的工件。

目前的解决方法是让根项目使用java插件,生成/安装一个空的jar,并操纵生成的pom以符合maven的期望(packaging=pom),但这是一种黑客行为。

有没有办法用gradle生成这个根pom文件?

示例项目:

settings.gradle

rootProject.name = 'MultiProject'
include 'child01', 'child02'
rootProject.children.each { it.name = rootProject.name + "-" + it.name }

盖德·格拉德尔

subprojects {
  apply plugin: 'java'
}
allprojects {
  apply plugin: 'maven'
  group = 'my_group'
  version = '0.0.1-SNAPSHOT'
}

编辑(当前解决方案),添加到build.gradle

// workaround to generate pom
apply plugin: 'java'

configurations {
    pomCreation
}

task createPom {
    ext.newPomFile = "${buildDir}/blabla.pom"
    doLast {
        pom {
            project {
                packaging 'pom'
            }
        }.writeTo(newPomFile)
    }
}
install.dependsOn(createPom)

artifacts {
    pomCreation file(createPom.newPomFile)
}

共有1个答案

邰建业
2023-03-14

我会使用gradle maven发布插件。使用该插件,您可以定义特定的pom,而不必上传其他工件。这里是一个例子:

publishing {
    publications {
    maven(MavenPublication) {
        pom.withXml{
            def xml = asNode()
            xml.children().last() + {               
                delegate.dependencies {
                    delegate.dependency {
                        delegate.groupId 'org.springframework'
                        delegate.artifactId 'spring-context'
                        delegate.version( '3.2.8.RELEASE' )
                    }
                }
            }
        }
    }
}
 类似资料:
  • 更改历史 * 2017-12-31 胡小根 初始化文档 1 步骤 以下步骤以 Xcode 8.3.1 为例 1.1 生成xcode工程 ionic cordova platform add ios 如下图所示: 1.2 在xcode中登录Apple ID 如下图所示: 1.3 生成CSR文件 1.4 生成Certificate 登录developer.apple.com,生成Ce

  • 游戏发布之前的准备 啊,这么快就已经到最后一步了? 恭喜,现在只要再做最后一些处理,你的游戏就可以发布了。 首先需要的是对游戏的菜单进行调整。 平时测试的时候,“调试”菜单栏可以打开后台,方便你查看游戏过程中发生的事,但你肯定不想玩家通过后台查看甚至任意修改角色好感度吧。 所以呢,把没用的菜单关掉是很重要的一步。 只要打开“界面设定-Config.tjs”就可以很简单地关掉不想要的菜单项,当然,关

  •  在运行吉里吉里程序时、会出现游戏工程文件夹选择画面(译注:请试着点一下KAGeXpress文件夹下的krkr.eXe)。如果不希望出现文件夹选择画面,而是让吉里吉里自动读取游戏工程的话,可以使用以下的方法。 将游戏工程文件夹改名为 data  将游戏工程文件夹命名为 "data" ,并将文件夹和吉里吉里可执行文件 ( krkr.eXe ) 放在同一目录下,在吉里吉里起动的时候,就会自动执行这个游

  • 对于所有专家,我们一直在开发一个包含以下模块的应用程序: opencv 努比 熊猫 跺脚 nltk bs4 PIL 请求 还有一些不是pythons标准库的一部分。希望将其打包到单个可执行文件中。因此,我们尝试使用pyinstaller。执行时也是如此-它会建立分发文件夹-但无法执行。它抛出以下错误: 下面是运行命令时的输出 有人能帮我做同样的事吗。。我怎样才能解决这个问题?

  • 我目前正在尝试在Azure运营模式服务器中设置一个包含多个工件的发布管道。第一个工件是从构建管道发布的,另一个工件是托管在Azure工件提要中的NuGet包。 当我创建和部署版本时,它成功下载了第一个工件,没有问题,当它继续下载NuGet包时,任务被标记为成功,但是它无法下载日志中包含以下内容的NuGet包。 知道会发生什么吗?

  • 我最终将两个不同的pom文件(一个用于常规jar文件,一个用于影子jar)发布到同一个URL,其中一个覆盖另一个。这种行为导致客户下载默认的jar,但在pom文件中没有任何依赖项。 我尝试了许多方法来禁用shadowJar pom文件,但没有任何成功。我怎么让它工作?