我正在使用“maven”插件将Gradle构建创建的工件上传到Maven中央存储库。我正在使用类似于以下任务的任务:
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.project {
name 'Example Application'
packaging 'jar'
url 'http://www.example.com/example-application'
scm {
connection 'scm:svn:http://foo.googlecode.com/svn/trunk/'
url 'http://foo.googlecode.com/svn/trunk/'
}
licenses {
license {
name 'The Apache License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
}
}
}
}
然而,此任务创建的POM文件不能正确报告在我的Gradle构建文件中被排除的依赖项。例如:
dependencies {
compile('org.eclipse.jgit:org.eclipse.jgit.java7:3.5.2.201411120430-r') { exclude module: 'commons-logging' }
compile('com.upplication:s3fs:0.2.8') { exclude module: 'commons-logging' }
}
如何在生成的POM文件中正确管理排除的依赖项?
在Gradle依赖项上使用“排除”通常是正确的答案,但是我仍然需要从将我带到这个StackOverflow页面的POM中删除一些“运行时唯一”依赖项。我使用Gradle 4.7的测试似乎表明,使用“只编译”将依赖完全排除在pom之外,但是“只运行”在pom中增加了一个“运行时”依赖,这在我的例子中不是我想要的。我想不出一个“标准”的Gradle方法来将运行时依赖排除在POM之外。
pom。When configured
另一个答案中显示的方法适用于传统的“maven”插件发布,但不适用于较新的“maven publish”插件。我的实验导致了《maven publish》:
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
pom.withXml {
asNode().dependencies.dependency.each { dep ->
if(dep.artifactId.last().value().last() in ["log4j", "slf4j-log4j12"]) {
assert dep.parent().remove(dep)
}
}
}
}
}
}
问题在于,在排除
定义中,没有指定组,只有模块。
添加这两个选项时,将在POM文件中正确添加排除项。例如:
compile('org.eclipse.jgit:org.eclipse.jgit.java7:3.5.2.201411120430-r') {
exclude group: 'commons-logging', module: 'commons-logging'
}
compile('com.upplication:s3fs:0.2.8') {
exclude group: 'commons-logging', module: 'commons-logging'
}
您可以通过过滤掉不需要的依赖项来覆盖pom的依赖项,例如,要排除junit,您可以向mavenDeployer配置添加以下行:
pom.whenConfigured {
p -> p.dependencies = p.dependencies.findAll {
dep -> dep.artifactId != "junit"
}
}
我正在尝试生成。jar,但是当它是使用Maven publishing生成的时候,它也生成了一个. pom文件。 问题是,我有另一个项目,当它实现这个依赖关系时,它以前只查找.jar,而现在它在所有其他项目中查找.pom,我想做的是,该项目停止使用“发布”任务生成.pom或在实现时停止寻找.pom文件以供其他项目使用。 下面是在 Artifactory 项目 A 中生成.jar的代码,其中项目 B
Maven插件及其在父pom中定义的依赖项,我不希望我的子pom包含该插件依赖项。 例如,如果有1个父级和100个子级,99个使用该插件并希望在一个子级中排除该插件。 我们如何才能实现这一目标?
目前,如果我试图在Gradle中做类似的事情,排除将被忽略,并且下载所有六个工件。 我使用的是Gradle版本1.8。
我在父pom中有一个版本为2.3的Jackson,在我的子pom中我需要版本2.9,是否有任何方法排除父pom依赖?
问题内容: 我遇到一个问题,其中同一类的多个版本显示在我的类路径中。有问题的班级是。我要使用的版本由引入。但是,我们还使用了Jira rest客户端库,该库依赖于较旧版本的jersey(),该版本包含捆绑在jar中的java.ws软件包。 这是构建文件中的示例片段: 我无法删除它,因为它使用了与新版本不同的软件包名称,并且会导致在Jira客户端中找不到类def的异常。 据我所知,目前我的选择是:
在我的父pom xml文件中,我声明了一些在大多数孩子的pom中使用的依赖项。 然而,在一个子pom中,我不使用这些依赖项,我想找到一种方法来排除它们(为了不被视为未使用的依赖项)。 现在,在子pom的依赖部分,我什么都没有!有什么想法吗?