我有一个多项目配置,我想使用gradle.
我的项目是这样的:
项目A.
src/main/javasrc/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编译测试文件.
我试图了解如何处理以下项目设置:
?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是如何工作的,我打开这个给你们分享你的想法......
考虑到重复相同的构建文件(我敢说)是不可接受的,因为我可能想要在所有模块的所有构建逻辑中更改某些内容
处理这种设置的最佳方法是什么?
我有一个像这样的目录/项目设置:
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) 我有以下项目结构
-->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文件中的配置.
我在这做错了什么?
我对这个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
假设我想使用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)
我假设解析子项目不会递归.这有什么解决方法吗?
每个例子都用样本名称掩盖,如果我犯了任何错误,对不起.
谢谢!
我有很好的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建立正确.
目前我已经设置了以下所有内容:
目录:
settings.gradle
include Libraries/MovedProject,
SomeMainProject1,
SomeMainProject2,
SomeMainProject3
Run Code Online (Sandbox Code Playgroud)MovedProject的sourceSets定义Libraries/MovedProject/project.gradle如下:
sourceSets {
main { …Run Code Online (Sandbox Code Playgroud)
在我们的Gradle项目中,我们想要为功能测试添加一个新模块,该模块需要能够访问其他子项目的依赖项,但仍然不能作为完整项目构建的一部分运行.如果我试试这个,它仍然会被构建:
def javaProjects() {
return subprojects.findAll { it.name != 'functional-tests' }
}
configure(javaProjects()) {
...
}
project(':functional-tests') {
....
}
Run Code Online (Sandbox Code Playgroud)
即使我将功能测试版本移动到它自己的单独的build.gradle文件,结果也是一样的.有人可以指出如何实现这一目标吗?
我们有一个像这样设置的旧项目:
.
??? customizationProject
? ??? ejb
? ??? services
??? projectA
? ??? ejb
? ??? shared
??? projectB
? ??? ejb
??? projectC
??? ejb
??? services
Run Code Online (Sandbox Code Playgroud)
我们的想法是customizationProject是交付的应用程序的最终组装发生的地方,实际上可能有多个 customizationProjects,它们可能包含多个配置.然而,这不是我要解决的问题.
我想使customizationProject成为gradle项目的逻辑根项目.如何配置各个项目,以便a)知道它们是多项目构建的一部分b)可以正确执行,具有不同的范围,例如只运行一个子项目的测试,同时还允许执行所有测试在所有项目中?
我正在努力制作一个多项目构建的东西.根项目看起来像这样:
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)
有没有人有任何例子,或者只是指出我正确的方向?
谢谢!
gradle ×10
multi-project ×10
build ×3
android ×2
dependencies ×2
java ×2
build.gradle ×1
package ×1