Модуль Mulit с каждым модулем предоставляет службу rest в gradle с помощью spring

#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