我正在开发一个Android库,并且只有在使用我的库的项目包含该依赖项时才想使用依赖项.类似于毕加索与OkHttp所做的事情.
我已经通过检查ClassNotFoundExceptions在主代码上处理了这个问题,但它仍然包含了将其部署到Maven Central的依赖关系.如何生成Maven
标签等内容?
我正在使用gradle-mvn-push通过Gradle部署我的工件.
为GRADLE-1749投票.
同时您可以使用pom.withXml
方法修改生成的pom文件,例如添加
标签或更改
值:
apply plugin: 'java'
apply plugin: 'maven-publish'
configurations {
optional
compile.extendsFrom optional
}
dependencies {
compile 'com.some.group:artifact:1.0';
optional 'com.another.group:optional-artifact:1.0'
}
publishing {
publications {
maven( MavenPublication ) {
from components.java
pom.withXml {
asNode().dependencies.dependency.findAll { xmlDep ->
// mark optional dependencies
if ( project.configurations.optional.allDependencies.findAll { dep ->
xmlDep.groupId.text() == dep.group && xmlDep.artifactId.text() == dep.name
} ) {
def xmlOptional = xmlDep.optional[ 0 ];
if ( !xmlOptional ) {
xmlOptional = xmlDep.appendNode( 'optional' )
}
xmlOptional.value = 'true';
}
// fix maven-publish issue when all maven dependencies are placed into runtime scope
if ( project.configurations.compile.allDependencies.findAll { dep ->
xmlDep.groupId.text() == dep.group && xmlDep.artifactId.text() == dep.name
} ) {
def xmlScope = xmlDep.scope[ 0 ];
if ( !xmlScope ) {
xmlScope = xmlDep.appendNode( 'scope' )
}
xmlScope.value = 'compile';
}
}
}
}
}
}
该星云额外配置摇篮插件似乎提供可选的.
你会像这样使用它:
apply plugin: 'java' apply plugin: 'nebula.optional-base' repositories { mavenCentral() } dependencies { compile 'org.apache.commons:commons-lang3:3.3.2', optional compile group: 'log4j', name: 'log4j', version: '1.2.17', optional }