2016-02-06 2 views
1

Я хотел бы использовать Gradle для создания проекта java, и я хотел бы структурировать его следующим образом.Gradle all in one build

  • Ядро библиотека
  • Web App (война плагина)
  • сервера (приложение плагин)
  • Client
  • Клиент войны (война плагина)

Веб-приложение, сервер, и Клиент зависит от ядра. Сервер зависит от веб-приложения, потому что он будет обслуживать его как страницу администратора с помощью встроенного Jetty. Клиентская война зависит от Клиента. Клиентская война должна быть развернута на веб-сервере для распространения клиента в качестве приложения для веб-запуска.

Что я хотел бы знать, так это то, как я могу сообщить серверному проекту, что он зависит от веб-приложения, и его необходимо скопировать в нужное место в его структуре распределения. Я также хотел бы знать, как я могу сказать, что проект Client War зависит от проекта клиента и скопировать банку клиента и все его зависимости в правильное место для создания военного архива.

Я планирую использовать плагин приложения для сервера, поэтому под <root>/src/dist будет находиться каталог webapp, где будет находиться одно или, возможно, большее количество веб-приложений. Ожидается, что файлы, содержащиеся в каталоге webapp, будут файлами войны.

Это новый проект, поэтому он может следовать стандартным соглашениям о строительстве Gradle и планировке проекта, ожидаемой Gradle.

Идеально в какой-то момент артефакты Клиента будут опубликованы во внутреннем хранилище Artifactory или Sonatype Nexus, чтобы клиентская война могла быть построена с поддержкой версий.

До сих пор я нашел следующие ресурсы.

+0

Возможный дубликат [Gradle и структуры Multi-Project] (HTTP://stackoverflow.com/questions/17536652/gradle-and-multi-project-structure) – Ethan

+0

Я не пытаюсь объединить сборку в один файл build.gradle. Я бы описал это как определение новой классификации зависимостей (пример compile, testRuntime, myCustomTransient, packageagedApp), на которые я хочу обработать specail. – Zixradoom

+0

Это сообщение не о одном build.gradle. Вы ищете конфигурации. – Ethan

ответ

0

Я полагаю, что я понял, Web App часть зависимостей моей проблемы. На данный момент война с клиентами - потерянная причина.

Сервер build.gradle

apply plugin: 'java' 
apply plugin: 'maven' 
apply plugin: 'application' 

targetCompatibility = 1.8 
sourceCompatibility = 1.8 
version = '0.0.1-SNAPSHOT' 
group = 'com.s2d' 
mainClassName = 'com.simonsoftwaredesign.example.echo.server.EchoServerApp' 

repositories { 
    mavenCentral() 
} 

configurations { 
    webContainer 
} 

dependencies { 
    compile project(':echo-core') 
    compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.3.7.v20160115' 
    compile group: 'org.eclipse.jetty', name: 'jetty-webapp', version: '9.3.7.v20160115' 

    webContainer project(path: ':echo-admin', configuration: 'warApp') 
} 

task copyWebApps(dependsOn: configurations.webContainer, type: Copy) { 
    from { configurations.webContainer.collect { it } } 
    // I don't like how this is hard coded 
    // but I am not sure how to fix it 
    into 'src/main/dist/webapp' 
} 

installDist.dependsOn copyWebApps 
distZip.dependsOn copyWebApps 
distTar.dependsOn copyWebApps 

Web App build.gradle

apply plugin: 'java' 
apply plugin: 'maven' 
apply plugin: 'war' 

targetCompatibility = 1.8 
sourceCompatibility = 1.8 
version = '0.0.1-SNAPSHOT' 
group = 'com.s2d' 

configurations { 
    warApp 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    providedCompile project(':echo-core') 
    providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' 
} 

artifacts { 
    warApp war 
} 

Gradle projects depending on artifacts created by sibling projects