maven - Maven 库的可选 Gradle 依赖项

标签 maven gradle android-studio pom.xml android-gradle-plugin

我正在开发一个 Android 库,并且仅当使用我的库的项目也包含该依赖项时才希望使用该依赖项。类似于 PicassoOkHttp 一起使用.

我已经通过检查 ClassNotFoundExceptions 在主代码上解决了这个问题,但它仍然包含将其部署到 Maven Central 时的依赖项。我如何生成诸如 Maven 的 <optional>true</optional> 之类的东西标签?

我正在使用 gradle-mvn-push通过 Gradle 部署我的 Artifact 。

最佳答案

投票给 GRADLE-1749 .

同时您可以使用 pom.withXml修改生成的pom文件的方法,例如添加<optional>标签或更改 <scope>值(value)观:

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';
          }
        }
      }
    }
  }
}

关于maven - Maven 库的可选 Gradle 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345804/

相关文章:

AndroidAnnotations 没有生成,空 Activity

android - 将 .aar 文件集成到多模块 android studio 项目中

java - 如何在 LinearLayout 中显示 "visibility="消失的 TextView""

Android gradle 构建错误 "finished with non-zero exit value 42",这是什么意思,我该如何解决?

maven - 使用 Maven 构建站点 zip

java - 如何在 Eclipse 中启动 Java EE 6 项目

Gradle 文件树懒惰的平面复制

java - 如何修复 "Exception in thread "main"java.lang.NoClassDefFoundError : com/dropbox/core/json/JsonReader$FileLoadException"

java - 示例项目 “hello-world” 项目在尝试在 App Engine 上运行时显示错误

android - 错误的IDE Android Studio