2017-02-20 19 views
0

Я следующий набор до:Gradle применение различных задач для каждого подпроекта

Project

  • весна загрузки приложение
  • Java классы, которые упакованы в баночку
  • андроида проекта
    • модуль приложения андроидного проекта

Я пытаюсь создать градиентную сборку, чтобы получить запущенное приложение jar jar для загрузки, java-библиотеку jar, которая установлена ​​в локальном репозитории maven и файл apk для android.

  • Чтобы получить файл АПК Мне нужно запустить assembleDebug задачу
  • Для публикации Java ibrary Мне нужно запустить опубликовать задачу
  • Чтобы получить пружинный исполняемый файл, мне нужно, чтобы запустить compileJave задачу

Вопрос является ли какая-то задача запускать файл верхнего уровня gradel.build верхнего уровня для выполнения различных задач?

корень Gradle:

allprojects { 
    task hello << { task -> println "I'm $task.project.name" } 
} 
subprojects { 
    repositories { 
     mavenCentral() 
     jcenter() 
    } 
} 

Spring Загрузочный Gradle:

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'org.springframework.boot' 

defaultTasks 'clean', 'build' 

buildscript { 
    ext { 
      springBootVersion = '1.5.1.RELEASE' 
     } 
     repositories { 
      mavenCentral() 
     } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-   plugin:${springBootVersion}") 
    } 
} 

jar { 
    baseName = 'demo' 
    version = '0.0.1-SNAPSHOT' 
} 

sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-security') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('io.jsonwebtoken:jjwt:0.7.0') 
    compile('mysql:mysql-connector-java:6.0.5') 

    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

Java Рго Gradle:

jar { 
    baseName = 'commonobjects' 
    version = "0.0.1-SNAPSHOT" 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

Android Рго Gradle:

buildscript { 
    repositories { 
      jcenter() 
     mavenCentral() 
     } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.3' 
    } 
} 

Android App Gradle:

def ANDROID_SUPPORT_DEPENDENCY_VERSION = '25.1.0' 
def DAGGER_DEPENDENCY_VERSION = '2.8' 
def OK_HTTP_DEPENDENCY_VERSION = '3.5.0' 
def RETROFIT_DEPENDENCY_VERSION = '2.1.0' 
def RETROFIT_JACKSON_DEPENDENCY_VERSION = '2.1.0' 
def BUTTER_KNIFE_DEPENDENCY_VERSION = '8.5.1' 
def JAVAX_ANNOTATION_JSR250_API_DEPENDENCY_VERSION = '1.0' 
def GREEN_ROBOT_EVENT_BUS_DEPENDENCY_VERSION = '3.0.0' 
def RX_JAVA_DEPENDENCY_VERSION = '2.0.5' 
def RX_ANDROID_JAVA_DEPENDENCY_VERSION = '2.0.1' 

defaultTasks 'clean', 'assembleDebug' 

buildscript { 
    repositories { 
     mavenCentral() 
     jcenter() 
     maven { 
      url "https://plugins.gradle.org/m2/" 
     } 
    } 
    dependencies { 
     classpath "net.ltgt.gradle:gradle-apt-plugin:0.9" 
    } 
} 

repositories { 
    jcenter() 
    mavenCentral() 
} 

apply plugin: "com.android.application" 
apply plugin: 'idea' 


android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.1" 

    defaultConfig { 
     applicationId "..." 
     minSdkVersion 14 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 

//  debug { 
//   buildConfigField "String", "PARSE_APPLICATION_ID", "\"1\"" 
//   buildConfigField "String", "PARSE_API_KEY", "\"1\"" 
//  } 

     release { 
      minifyEnabled true 
      proguardFiles "android-proguard-android.txt", "proguard-rules.txt" 

      // buildConfigField "String", "PARSE_APPLICATION_ID", "\"1\"" 
      // buildConfigField "String", "PARSE_API_KEY", "\"1\"" 
     } 
    } 

    packagingOptions { 
     pickFirst 'META-INF/LICENSE' 
    } 
} 

dependencies { 
    // Add jars supplied 
    compile fileTree(dir: 'libs', include: ['*.jar']) 

    // Test related 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    testCompile 'junit:junit:4.12' 

    androidTestCompile "com.android.support:support-annotations:${ANDROID_SUPPORT_DEPENDENCY_VERSION}" 
    androidTestCompile "com.android.support.test:runner:0.5" 

    // Android support libraries 
    compile "com.android.support:appcompat-v7:${ANDROID_SUPPORT_DEPENDENCY_VERSION}" 
    compile "com.android.support:design:${ANDROID_SUPPORT_DEPENDENCY_VERSION}" 
    compile "com.android.support:support-annotations:${ANDROID_SUPPORT_DEPENDENCY_VERSION}" 

    // An HTTP & HTTP/2 client for Android and Java applications 
    compile "com.squareup.okhttp3:okhttp:${OK_HTTP_DEPENDENCY_VERSION}" 

    // Retrofit: A type-safe HTTP client for Android and Java 
    compile "com.squareup.retrofit2:retrofit:${RETROFIT_DEPENDENCY_VERSION}" 
    compile "com.squareup.retrofit2:converter-jackson:${RETROFIT_JACKSON_DEPENDENCY_VERSION}" 

    // Butterknife: Field and method binding for Android views 
    compile "com.jakewharton:butterknife:${BUTTER_KNIFE_DEPENDENCY_VERSION}" 
    annotationProcessor "com.jakewharton:butterknife-compiler:${BUTTER_KNIFE_DEPENDENCY_VERSION}" 

    // Dagger DI 
    compile "com.google.dagger:dagger:${DAGGER_DEPENDENCY_VERSION}" 
    annotationProcessor "com.google.dagger:dagger-compiler:${DAGGER_DEPENDENCY_VERSION}" 
    provided "javax.annotation:jsr250-api:${JAVAX_ANNOTATION_JSR250_API_DEPENDENCY_VERSION}" 

    // Event bus 
    compile "org.greenrobot:eventbus:${GREEN_ROBOT_EVENT_BUS_DEPENDENCY_VERSION}" 

    // RxJava a library for composing asynchronous and event-based programs by using observable sequences. 
    compile "io.reactivex.rxjava2:rxjava:${RX_JAVA_DEPENDENCY_VERSION}" 
    compile "io.reactivex.rxjava2:rxandroid:${RX_ANDROID_JAVA_DEPENDENCY_VERSION}" 
} 

ответ

1

Вы можете просто создать задачу, которая будет зависеть от трех различных задач. Можно иметь зависимости между подпроектов, а также:

task myAllTask { 
} 

myAllTask.dependsOn assembleDebug, publish, compileJava 

Для запуска задач из подпроектов:

myAllTask.dependsOn ':bootProj:assembleDebug', ':javaProj:publish', ':androidProj:compileJava 
+0

Так что я могу просто запустить Gradle myAllTask ​​в корневой папке. И build.gradle будет точно определять код? И еще одна вещь, что порядок также имеет значение, я должен сначала опубликовать javaProj, так как это зависимость как от сервера, так и от приложения Android. @ sm4 –

+0

Возможно, попробуйте быть более конкретным в своем вопросе. Опишите, как организованы ваши файлы градиентов. Корневая градация будет содержать задание {}, а затем dependOn. Вы также должны иметь зависимость от подпроекта, который должен запускаться сначала в блоке зависимостей. – sm4

+0

Я добавил свои текущие источники, мой вопрос - это действительно заработная плата, так как я могу делать несколько ошибок в градиенте. Но цель состоит в том, чтобы генерировать все артефакты из всех модулей, а затем использовать их для загрузки, развертывания и т. Д. Я также не совсем понимаю, почему проект андроида должен быть завернут в модуль андроида, а не просто приложение в качестве основного модуля андроида. @ см4 –