2016-11-09 1 views
1

У меня есть каталог с тремя проектами андроида. MainDir выглядит следующим образом:Gradle/Jenkins: Создайте файл градиента, чтобы перейти к подпроектам

/.gradle 
/.git 
/project1 
/project2 
/project3 
.gitignore 
.Jenkinsfile 
.README.md 

В Дженкинс я не могу запустить скрипт во время сборки, что launchs Gradle задачи для eauch этих проектов, потому что он не знает, это проекты (он говорит, что «нет подпроект ").

В директории для проекта это выглядит как:

/.gradle 
/app 
/build 
/gradle 
.gitignore 
.build.gradle 
.gradle.properties 
.gradlew 

есть способ сделать Дженкинс понять эти три проекта он может запустить Gradle Такс в? Как создать файл build.gradle в главном каталоге? Или я должен просто создать 3 предмета Дженкинса?

ответ

0

Вы можете сделать три сборки в jenkins, но если нет необходимости создавать libs отдельно, то это может просто стать дополнительным усилием. Похоже на то, что вы действительно хотите, это сборка нескольких проектов [1]. Простой пример может находиться в папке над вашими проектами lib в виде двух файлов: build.gradle и settings.gradle

settings.gradle Определяет, какие проекты включены в объем вашей сборки.

Например, с учетом ваших project1, project2 и project3 пример вашего settings.gradle может выглядеть следующим образом.

rootProject.name = 'myRootProjectName' 

// note the name is not required to match the actual path 
include ":project1" 
// but if the name is not the same as the path then we can just 
// let gradle know where the project is expected 
project(":project1").projectDir = new File(settingsDir, "pathToProject1") 

include ":project2" 
project(":project2").projectDir = new File(settingsDir, "pathToProject2") 

include ":project3" 
project(":project3").projectDir = new File(settingsDir, "pathToProject3") 

//##### below would be instead of the code above, same thing just manual 
// project setup vs letting gradle find the subprojects 
// note sometimes you have lots of subprojects in that case it's sometimes 
// easier to just use a little logic for finding and setting up the subprojects. 
// don't use the code above ##### and below only use one or the other 
// or you will have errors. The method below is the most scaleable since 
// adding projects requires zero modifications to the root project 
rootProject.name = 'myRootProjectName' 

// set up a couple file filters to find the dirs we consider subprojects 
FileFilter projectFilter = { File pathname -> 
    FileFilter gradleProjectFilter = { File file -> file.name == 'build.gradle' } 
    // add this folder if is a directory and that directory contains a build.gradle file 
    // here note `File#listFiles` is true if it's `size() > 0` due to 
    // groovy's concept of truth (details: http://groovy-lang.org/semantics.html#Groovy-Truth) 
    return pathname.isDirectory() && pathname.listFiles(gradleProjectFilter) 
} 

settingsDir.listFiles(projectFilter).each { dir -> 
    include ":$dir.name" 
    project(":$dir.name").projectDir = dir 
} 

В настоящее время работает gradle projects Задача должна показывать три подмодуля.

Что касается вашего файла build.gradle, вы можете указать некоторые общие свойства для всех модулей, если необходимо, или просто оставить файл пустым, он должен существовать, но может быть пустым. Если вы хотите поделиться некоторыми конфигурациями, вы можете настроить build.gradle с чем-то вроде этого.

project.subprojects { Project subproject -> 
    // anything that is defined here will be executed before the subproject's build.gradle file 
    subproject.buildscript { 
     repositories { 
      jcenter() 
      // your private maven repo if needed 
      maven { url 'http://1.2.3.4:8081/nexus/content/repositories/release' } 
     } 
     dependencies { 
      // some plugin that is now available to be applied in any subproject 
      classpath 'my.sweet.gradle:plugin:0.1' 
     } 
    } 
    subproject.afterEvaluate { 
     // this block is executed after the subproject's build.gradle file 
     if (project.tasks.withType(org.gradle.jvm.tasks.Jar)) { 
      // for example you might want to set the manifest for each subproject 
      manifest { 
       attributes 'Implementation-Title': "Lib $subproject.name", 
         'Implementation-Version': version 
      } 
     } 
    } 
} 

[1] https://docs.gradle.org/current/userguide/multi_project_builds.html

+0

Awesome, ТНХ за помощь. –