如何使用gradle上传多个模块的档案?

时间:2018-01-12 19:20:02

标签: android android-studio gradle android-gradle

我想在maven中使用$ ./gradlew uploadArchives

发布我的SDK

我有这个项目结构:

MyProject

  |_ SDK
     |_ src
         |_ main
              |_ java
                   |_ java files
     |_ build.gradle
  |_ gradle
        |_ gradle-publish.gradle

我使用了符合预期的以下代码(gradle-publish.gradle):

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
}

uploadArchives {
    repositories {
        mavenDeployer {
         /* ... */
        }
    }
}

artifacts {
    archives sourcesJar
    archives androidJavadocsJar
}

现在我将主模块拆分为2:SDKnew_module所以我的项目结构如下:

MyProject

  |_ SDK
     |_ src
         |_ main
              |_ java
                   |_ java files  "com.app"
     |_ build.gradle

 |_ new_module
     |_ src
         |_ main
              |_ java
                   |_ java files "com.app.mod"
      |_ build.gradle
  |_ gradle
        |_ gradle-publish.gradle

但无论我做什么,我总是只获得SDK个来源,而不是new_module a.e. com.app应与com.app.mod

合并

我尝试使用sourceSets,但看起来它在主模块SDK内部工作,而不是在根项目下:

sourceSets {
    main{
      java {
        srcDirs(
                "src/main/java",
                 "../new_module/src/main/java"
        )
    }
}

task sourcesJar(type: Jar) {
   classifier = 'sources'   
   from android.sourceSets.main.java.srcDirs    
}

任何想法,提示?

修改

我添加了

sourceSets {
    main{
      java {

        srcDirs("src/main/java",
                "${root_dir}/new_module/src/main/java"
        )
      }
    }
  }

但是在maven上我看到所有人都有来源,但classes.jar只包含app .class个文件

5 个答案:

答案 0 :(得分:2)

sourceSet android的{​​{1}}部分下添加自定义SDK

build.gradle

您不需要包含android{ //... sourceSets { main{ java { srcDirs "$rootDir/new_module/src/main/java/" } } } } - 已包含

此外,您不需要将"src/main/java"绑定到您的依赖项中,new_module将成为您new_module模块的一部分

SDK

答案 1 :(得分:0)

您是否尝试在每个build.gradle中包含gradle-publish.gradle?或者在你的主build.gradle?

E.g。在pyExcelerator

${rootDir}/new_module/build.gradle

apply from "${rootDir}/gradle/gradle-publish.gradle"

${rootDir}/build.gradle

答案 2 :(得分:0)

或者您可能没有定义要在build.gradle中发布的工件:

artifacts {
    archives jar, javadocJar, sourcesJar
    testArchives testJar, testSourcesJar
}

task javadocJar(type: Jar) {
    description "Assembles a jar archive containing the javadoc files"

    classifier = "javadoc"
    from javadoc
}

task sourcesJar(type: Jar) {
    description "Assembles a jar archive containing the source files"

    classifier = "sources"
    from sourceSets.main.allSource
}

task testJar(type: Jar, dependsOn: project.testClasses) {
    description "Assembles a jar archive containing the test files"

    classifier = "test"
    from project.sourceSets.test.output
}

task testSourcesJar(type: Jar) {
    description "Assembles a jar archive containing the test source files"

    classifier = "test-sources"
    from sourceSets.test.allSource
}

答案 3 :(得分:0)

查看要通过Jcenter分发的link,按照每个子模块链接中提到的步骤进行操作。

并确保所有子模块都使用通用的GROUP_ID发布到同一个遥控器。

答案 4 :(得分:0)

uploadArchives并不意味着用于安装到本地Maven存储库。相反,请使用install任务。

替换它:从

uploadArchives {
    repositories {
        mavenDeployer {
         /* ... */
        }
    }
}

到:

install{
        repositories {
            mavenDeployer {
             /* ... */
            }
        }
    }