Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven库的可选渐变依赖项_Maven_Gradle_Android Studio_Pom.xml_Android Gradle Plugin - Fatal编程技术网

Maven库的可选渐变依赖项

Maven库的可选渐变依赖项,maven,gradle,android-studio,pom.xml,android-gradle-plugin,Maven,Gradle,Android Studio,Pom.xml,Android Gradle Plugin,我正在开发一个Android库,只有在使用我的库的项目也包含依赖项时,我才会使用依赖项。类似于我们的产品 我已经通过检查ClassNotFoundExceptions在主代码中解决了这一问题,但在将其部署到Maven Central时,它仍然包含依赖项。如何生成诸如Maven的true标记之类的内容 我使用Gradle部署我的工件。投票赞成 同时,您可以使用pom.withXml方法修改生成的pom文件,例如添加标记或更改值: apply插件:“java” 应用插件:“maven发布” 配置{

我正在开发一个Android库,只有在使用我的库的项目也包含依赖项时,我才会使用依赖项。类似于我们的产品

我已经通过检查ClassNotFoundExceptions在主代码中解决了这一问题,但在将其部署到Maven Central时,它仍然包含依赖项。如何生成诸如Maven的
true
标记之类的内容

我使用Gradle部署我的工件。

投票赞成

同时,您可以使用
pom.withXml
方法修改生成的pom文件,例如添加
标记或更改
值:

apply插件:“java”
应用插件:“maven发布”
配置{
可选择的
compile.extendsFrom可选
}
依赖关系{
编译'com.some.group:artifact:1.0';
可选“com.other.group:可选工件:1.0”
}
出版{
出版物{
maven(maven出版物){
来自components.java
pom.withXml{
asNode().dependencies.dependency.findAll{xmlDep->
//标记可选依赖项
if(project.configurations.optional.allDependencies.findAll{dep->
xmlDep.groupId.text()==dep.group&&xmlDep.artifactId.text()==dep.name
} ) {
def xmlOptional=xmlDep.optional[0];
如果(!xml可选){
xmlOptional=xmlDep.appendNode('optional')
}
xmlOptional.value='true';
}
//修复所有maven依赖项都放入运行时范围时的maven发布问题
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
}
根据这一点,仅编译依赖关系解决了许多用例,包括:

  • 编译时需要依赖项,但只有在使用某些功能时才需要依赖项,也称为可选依赖项
  • 在编译时需要依赖项,但在运行时从不需要依赖项,例如仅源代码注释或注释处理器
  • 其API在编译时是必需的,但其实现将由消费库、应用程序或运行时环境提供的依赖项

所以只需使用compileOnly来声明可选的依赖项。

小更新:Gradle问题已转移到Github:。显然,没有合并。而且pom.withXml工作得非常好。找不到id为“nebula.optional base”的插件。