#java #spring #gradle
#java #spring #gradle
Вопрос:
Я пытаюсь создать многомодульный проект spring с Gradle. Каждый модуль имеет независимую службу rest api.
Я не слишком разбираюсь в Gradle. библиотека-приложение может получить доступ через модуль приложения, но не может одновременно выполнять API каждого модуля с помощью tomcat.
Модуль 1st: приложение
Настройки файла.gradle:
rootProject.name = 'application'
include ':library-application'
project(':library-application').projectDir = new File('../library-application')
Файл build.gradle:
buildscript {
ext { springBootVersion = '2.1.3.RELEASE' }
repositories { jcenter()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:1.0',
classpath 'org.apache.openjpa:openjpa-all:2.4.1'
classpath 'at.schmutterer.oss.gradle:gradle-openjpa:0.2.0'
}
}
plugins {
id "io.spring.dependency-management" version "1.0.5.RELEASE"
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'tomcat'
bootJar {
baseName = 'gs-multi-application'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
repositories { mavenCentral() }
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
compile project(':library-application')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Модуль 2nd: библиотека-приложение
Файл build.gradle:
buildscript {
repositories { jcenter()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:1.0',
classpath 'org.apache.openjpa:openjpa-all:2.4.1'
classpath 'at.schmutterer.oss.gradle:gradle-openjpa:0.2.0'
}
}
plugins {
id "io.spring.dependency-management" version "1.0.5.RELEASE"
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'tomcat'
plugins { id "io.spring.dependency-management" version "1.0.5.RELEASE" }
ext { springBootVersion = '2.1.3.RELEASE' }
jar {
baseName = 'gs-multi-library'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
repositories { mavenCentral() }
dependencies {
compile('org.springframework.boot:spring-boot-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Комментарии:
1. Что вы имеете в виду: «не удается одновременно выполнить API»? Как вы запускаете свое приложение Spring Boot, встроенное или контейнерное?
2. Я хочу запустить корневой проект «приложение», его дочерняя «библиотека-приложение» должна запускать собственный веб-сервис.
3. Это не так, как работает дочерний проект Gralde. Вы должны рассматривать корневой проект как своего рода «разделяемую библиотеку», и его вообще не следует «запускать».
4. Это означает, что невозможно запустить сервер из корневого проекта, а отдельный проект предоставляет отдельные веб-сервисы?
Ответ №1:
В общем случае корневой проект в Gradle ничего не делает, а только поддерживает общий build.gradle
и settings.properties
группирует дочерние проекты вместе. Планирование модуля должно выполняться с помощью управления зависимостями дочерних проектов, а не структурой папок.
Попробуйте организовать свои проекты таким образом:
root_project (very simple project doing nothing)
- library-application
- Provide service controllers
- application (depends on library-application)
- Provide SpringBootApplication