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

sna*_*ggs 7 android gradle android-studio android-gradle-plugin

我想在maven中发布我的SDK $ ./gradlew uploadArchives

我有这个项目结构:

MyProject

  |_ SDK
     |_ src
         |_ main
              |_ java
                   |_ java files
     |_ build.gradle
  |_ gradle
        |_ gradle-publish.gradle
Run Code Online (Sandbox Code Playgroud)

我使用了以下代码(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
}
Run Code Online (Sandbox Code Playgroud)

现在我主要分裂模块,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
Run Code Online (Sandbox Code Playgroud)

然而,无论我做什么,我总是只得到SDK资源而不应该与new_moduleae com.app合并com.app.mod

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

sourceSets {
    main{
      java {
        srcDirs(
                "src/main/java",
                 "../new_module/src/main/java"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

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

任何想法,提示?

编辑

我补充道

sourceSets {
    main{
      java {

        srcDirs("src/main/java",
                "${root_dir}/new_module/src/main/java"
        )
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

Max*_*tin 2

在您的部分sourceSet下添加自定义:androidSDK build.gradle

android{
    //...
    sourceSets {
        main{
            java {
                srcDirs "$rootDir/new_module/src/main/java/"

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您不需要包含"src/main/java"- 它已经包含在内

另外,您不需要绑定new_module到您的依赖项,它将成为您模块new_module的一部分SDK

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
  }
Run Code Online (Sandbox Code Playgroud)