Gradle 如何将artifactory运行时范围更改为编译范围?
我正在从事一个使用gradle和jfrog插件发布到artifactory的项目。重要的代码片段如下:Gradle 如何将artifactory运行时范围更改为编译范围?,gradle,artifactory,Gradle,Artifactory,我正在从事一个使用gradle和jfrog插件发布到artifactory的项目。重要的代码片段如下: plugins { id "java" id "idea" id "groovy" id "pmd" id "findbugs" id "maven-publish" id "com.jfrog.artifactory" version "3.1.1" } dependencies { compile 'com.google.guava:gua
plugins {
id "java"
id "idea"
id "groovy"
id "pmd"
id "findbugs"
id "maven-publish"
id "com.jfrog.artifactory" version "3.1.1"
}
dependencies {
compile 'com.google.guava:guava:18.0'
compile 'com.mashape.unirest:unirest-java:1.4.5'
compile 'log4j:log4j:1.2.14'
}
artifactory {
contextUrl = "https://SOME_SERVER/artifactory"
publish {
repository {
repoKey = 'libs-snapshot-local'
username = artifactory_username
password = artifactory_password
maven = true
}
defaults {
publications ('mavenJava')
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
当我做gradle artifactoryPublish时,一切似乎都很好。发布人工制品,并生成pom文件
遗憾的是,pom文件中的依赖项都具有运行时范围:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.whatsoever</groupId>
<artifactId>some-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
4.0.0
无论如何
一些应用程序
0.0.1-快照
番石榴
番石榴
18
运行时
com.mashape.unirest
unirest java
1.4.5
运行时
log4j
log4j
1.2.14
运行时
它们应该有一个编译作用域,而不是这个运行时作用域。我做错了什么 从未在practive上尝试过此操作,但您可以尝试使用
publication.pom.withXml
配置块在生成的pom中引入更改:
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
pom.withXml {
asNode().dependencies.'*'.findAll() {
it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep ->
dep.name == it.artifactId.text()
}
}.each() {
it.scope*.value = 'compile'
}
}
}
}
}
另外,这是新发布插件的一个已知限制,我在中找到了解决方案。从未在practive上尝试过,但您可以尝试使用
publication.pom.withXml
配置块在生成的pom中引入更改:
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
pom.withXml {
asNode().dependencies.'*'.findAll() {
it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep ->
dep.name == it.artifactId.text()
}
}.each() {
it.scope*.value = 'compile'
}
}
}
}
}
另外,这是新发布插件的一个已知限制,我在中找到了解决方案。很有效!尽管如此,我还是决定采用传统方法,直到这个插件不再酝酿。仅供参考:如果你的Gradle项目有多个模块,其中一个模块取决于另一个模块。您可能需要删除行“{dep->dep.name==it.artifactId.text()”,因为这将实际更改生成的pom.xml中有效的artifactId标记!尽管如此,我还是决定采用传统方法,直到这个插件不再酝酿。仅供参考:如果你的Gradle项目有多个模块,其中一个模块取决于另一个模块。您可能需要删除行“{dep->dep.name==it.artifactId.text()”,因为这将实际更改生成的pom.xml中的artifactId标记