标签: multi-project

使用gradle的多项目测试依赖项

我有一个多项目配置,我想使用gradle.

我的项目是这样的:

  • 项目A.

    • - > src/main/java
    • - > src/test/java
  • 项目B.

    • - > src/main/java(取决于src/main/java项目A)
    • - > src/test/java(取决于src/test/java项目A)

我的Project B build.gradle文件是这样的:

apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
}
Run Code Online (Sandbox Code Playgroud)

该任务compileJava工作得很好,但compileTestJava不会从项目A编译测试文件.

dependencies build multi-project gradle

133
推荐指数
13
解决办法
6万
查看次数

Gradle和Multi-Project结构

我试图了解如何处理以下项目设置:

?Top Android Project
?
??? Project 1 - (Pure Java Modules)
?    ?
?    ??? Module A1
?    ??? Module B1
?    :
?    ??? Module Z1
?  
??? Project 2 - (Android Libraries Modules)
?    ?
?    ??? Module A2
?    ??? Module B2
?    :
?    ??? Module Z2
?  
??? Module - Actual Android Project
Run Code Online (Sandbox Code Playgroud)

在当前的设置中,我在每个模块中都有一个build.gradle,我真正讨厌这个设置的是build.gradle的所有内容在模块之间重复.

事实上,我想在大多数情况下都使用相同的逻辑," 纯Java模块 "都是基础模块,我想将输出,JavaDoc和源,以及部署到某个远程存储库(*默认).

另一方面,' 纯Java模块 '的一些模块我想有第二个议程,例如,除了默认*构建之外,我想部署一个具有特定项目的依赖项的jar,或类似的东西.

在构建Actual Android Project时,我希望模块能够在默认的*build中编译,最后为我的所有Android项目配置一个默认的build.gradle,这些项目很多,我不想复制它文件.

================================================== =============

我想我正在寻找的东西就像Maven父母pom,但由于我不完全理解Gradle是如何工作的,我打开这个给你们分享你的想法......

考虑到重复相同的构建文件(我敢说)是不可接受的,因为我可能想要在所有模块的所有构建逻辑中更改某些内容

处理这种设置的最佳方法是什么?

android multi-project gradle android-studio build.gradle

61
推荐指数
2
解决办法
3万
查看次数

需要另一个目录中的Gradle项目

我有一个像这样的目录/项目设置:

C:\
    _dev\
        Projects\
            Logger
            MyProject
Run Code Online (Sandbox Code Playgroud)

Logger是一个使用Gradle的Android库项目.MyProject是一个标准的Android项目项目,需要使用Logger库.

我正在使用Android Studio,并尝试将Logger添加到外部库.虽然这在开发过程中起作用,但我会在构建时收到有关未找到类的消息.

我是Gradle的新手,但在MyProject中的build.gradle中尝试了以下内容:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 18
    }

    dependencies {
        compile files("../Logger")
    }
}

dependencies {
    compile 'com.android.support:gridlayout-v7:18.0.0'
    compile 'com.android.support:appcompat-v7:18.0.0'
}
Run Code Online (Sandbox Code Playgroud)

java android multi-project gradle android-library

61
推荐指数
3
解决办法
5万
查看次数

多个设置为多个项目构建gradle文件

我有以下项目结构

-->Starnderd Location
        -->Project1 
           -->settings.gradle 
           -->build.gradle
           -->Subproject11
              -->build.gradle
           -->Subproject12
              -->build.gradle
        -->Project2 
           -->settings.gradle 
           -->build.gradle
           -->Subproject21
              -->build.gradle
           -->Subproject22
              -->build.gradle
        -->build.gradle
        -->settings.gradle
Run Code Online (Sandbox Code Playgroud)

上述项目结构的想法是我们有多个包含子项目的项目,每个项目都可以与其他项目有依赖关系.项目内的子项目也可以与同一项目中的其他子项目具有依赖关系.项目将在根目录中的settings.gradle中指定.此外,每个项目中的settings.gradle将说明该特定项目的子项目是什么.

我在根目录中的settings.gradle看起来像

include 'Project1',
         'Project2'
Run Code Online (Sandbox Code Playgroud)

和Project1 settings.gradle看起来像

include 'SubProject11'
         'SubProject12'
Run Code Online (Sandbox Code Playgroud)

其他depndecy命令在相应的build.gradle文件中定义如果我在根位置(Standar位置)内进行gradle clean build install,它似乎不使用Project level settings.gradle文件中的配置.

我在这做错了什么?

build-automation multi-project gradle

42
推荐指数
5
解决办法
2万
查看次数

Gradle嵌套的多项目与项目编译依赖项

我对这个Gradle多模块项目设置有一个相同的问题,但我必须使用项目编译依赖项来构建,并且不能使用在上述问题中作为解决方案给出的库(jar)依赖项解决方案.

Root
|__ P1
|   |_ PP1
|   |_ PP2
|
|__ P2
   |_PP3
   |_PP4
Run Code Online (Sandbox Code Playgroud)

PP1,PP2,PP3和PP4是子项目,每个都有自己的build.gradle文件; P1和P2也有build.gradle和settings.gradle文件.

如何在PP3的build.gradle文件中将PP1声明为编译依赖?

apply plugin: 'java' 
dependencies {
    compile('P1:PP1') //does not work
    compile group: 'P1', name: 'PP1', version: '0.1' // jar library dependency not an option

    compile('{ant_target}')? //follow up question - an ant target as a dependency
}
Run Code Online (Sandbox Code Playgroud)

我正在运行Gradle v1.2

dependencies build multi-project gradle

27
推荐指数
1
解决办法
3万
查看次数

Gradle - 递归子项目

假设我想使用Gradle项目结构,例如:

RootProject
\-- SubProjectA
    \-- SubProjectAA
    \-- SubProjectAB
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个目标?

我尝试的非常简单.我创建了所有目录,具有上述结构:

RootProject
\-- SubProjectA
    \-- SubProjectAA
        \-- build.gradle
    \-- SubProjectAB
        \-- build.gradle
    \-- build.gradle
    \-- settings.gradle
\-- build.gradle
\-- settings.gradle
Run Code Online (Sandbox Code Playgroud)

RootProject/settings.gradle:

include "SubProjectA"
Run Code Online (Sandbox Code Playgroud)

RootProject/SubProjectA/settings.gradle:

include "SubProjectAA", "SubProjectAB"
Run Code Online (Sandbox Code Playgroud)

我试过两件事.首先,我尝试在Eclipse中导入项目 - 它没有检测到SubProjectAA也没有SubProjectAB.惊呆了,我跑gradle projects进来RootProject得到了这个输出:

------------------------------------------------------------
Root project
------------------------------------------------------------

Root project 'RootProject'
\--- Project ':SubProjectA'
Run Code Online (Sandbox Code Playgroud)

仍然,我以为我犯了一个错误,我尝试在SubProjectA中运行相同的命令,并得到:

------------------------------------------------------------
Root project
------------------------------------------------------------

Root project 'RootProject'
\--- Project ':SubProjectAA'
\--- Project ':SubProjectAB'
Run Code Online (Sandbox Code Playgroud)

我假设解析子项目不会递归.这有什么解决方法吗?

每个例子都用样本名称掩盖,如果我犯了任何错误,对不起.

谢谢!

multi-project gradle

23
推荐指数
1
解决办法
9621
查看次数

Gradle multiproject提供"无法在项目中找到属性'sourceSets'错误

我有很好的gradle配置,建立一切都很好.但是我的多项目构建中的一个项目来自其他项目,我很乐意将它移动到另一个git repo并配置子模块来处理它.

首先,我将Project及其资源移至子文件夹Libraries/MovedProject.在改变了gradle配置中的一些行后,它工作正常.但后来我决定为这个项目编写一个新的build.gradle,并将所有配置从主项目移到那里.

这就是一切都停止工作的地方.当我试图调用任何任务时,它总是以Could not find property 'sourceSets' on project ':Libraries/MovedProject'.负责的是:

dependencies {
    ...
    if (noEclipseTask) {
        testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
    }
}
Run Code Online (Sandbox Code Playgroud)

我用它来运行我使用其他项目的类的测试.如果我删除该行,则只有当它到达使用MovedProject的项目的compileTestJava任务时,构建才会失败.如果我删除该行并打电话,gradle :Libraries/MovedLibrary:properties我可以看到:

...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...  
Run Code Online (Sandbox Code Playgroud)

同时gradle :Libraries/MovedLibrary:build建立正确.

目前我已经设置了以下所有内容:

  1. 目录:

    • / SomeMainProject1
    • / SomeMainProject2
    • / SomeMainProject3
    • /库
      • / MovedProject
        • 的build.gradle
        • dependencies.gradle
        • project.gradle
        • tasks.gradle
    • /生成器
      • dependencies.gradle
      • project.gradle
      • tasks.gradle
    • 的build.gradle
    • settings.gradle
  2. settings.gradle

    include Libraries/MovedProject,
            SomeMainProject1,
            SomeMainProject2,
            SomeMainProject3
    
    Run Code Online (Sandbox Code Playgroud)
  3. MovedProject的sourceSets定义Libraries/MovedProject/project.gradle如下:

    sourceSets {
        main { …
    Run Code Online (Sandbox Code Playgroud)

multi-project gradle

21
推荐指数
1
解决办法
4万
查看次数

Gradle从完整版本中排除特定子项目


在我们的Gradle项目中,我们想要为功能测试添加一个新模块,该模块需要能够访问其他子项目的依赖项,但仍然不能作为完整项目构建的一部分运行.如果我试试这个,它仍然会被构建:

def javaProjects() {
   return subprojects.findAll { it.name != 'functional-tests' }
}

configure(javaProjects()) {
   ...
}

project(':functional-tests') {
    ....
}
Run Code Online (Sandbox Code Playgroud)

即使我将功能测试版本移动到它自己的单独的build.gradle文件,结果也是一样的.有人可以指出如何实现这一目标吗?

multi-project gradle

17
推荐指数
4
解决办法
3万
查看次数

Gradle:如何使用并排项目配置多项目设置

我们有一个像这样设置的旧项目:

.
??? customizationProject
?   ??? ejb
?   ??? services
??? projectA
?   ??? ejb
?   ??? shared
??? projectB
?   ??? ejb
??? projectC
    ??? ejb
    ??? services
Run Code Online (Sandbox Code Playgroud)

我们的想法是customizationProject是交付的应用程序的最终组装发生的地方,实际上可能有多个 customizationProjects,它们可能包含多个配置.然而,这不是我要解决的问题.

我想使customizationProject成为gradle项目的逻辑根项目.如何配置各个项目,以便a)知道它们是多项目构建的一部分b)可以正确执行,具有不同的范围,例如只运行一个子项目的测试,同时还允许执行所有测试在所有项目中?

java build multi-project gradle

15
推荐指数
1
解决办法
8700
查看次数

Gradle多项目分发

我正在努力制作一个多项目构建的东西.根项目看起来像这样:

apply plugin: 'distribution'
version 1.0
distributions {
    main {
        baseName = 'someName'
        contents {
            from 'nodes' 
        into 'nodes'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它只是将带有一些文件的文件夹复制到dist.

我现在希望每个子项目将其内容注入dist.我想添加每个子项目jar,任何dependecies,可能还有一些其他文件等...

我不知道如何从子项目注入根.我应该做那样的事吗?我的意思是这样的:

subprojects {
   apply java...
   ...

   // pseudocode
   jack into the root project dist plugin
   put my produced jars and dependencies in a folder with my name
   ...
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何例子,或者只是指出我正确的方向?

谢谢!

package multi-project gradle

14
推荐指数
2
解决办法
7659
查看次数