Spring Boot Gradle Plugin 2.x, как использовать фабрику пользовательского макета запуска

В моем проекте я использую ActiveMQ artemis и Spring Boot. Приложение должно выполняться как служба демона Apache Commons. Я хотел бы использовать свой собственный лаунчер в этом проекте.

Проект имеет следующую конфигурацию Gradle:

buildscript {

    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url 'https://repo.spring.io/libs-snapshot' }
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M7")
    }
}

plugins {
  id "org.sonarqube" version "2.6.1"
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'

ext {    
    commonsDaemonVersion = '1.1.0'
    artemis = '2.4.0'
}

dependencies {

    compile("org.apache.activemq:artemis-server:${artemis}")
    compile("org.apache.activemq:artemis-core-client:${artemis}")

    compile("commons-daemon:commons-daemon:${commonsDaemonVersion}")
}

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
}

Поскольку я использую ActiveMQ artemis, я не могу использовать версию 1.5.x плагина Spring Boot Plugin, поскольку его модуль управления зависимостями автоматически понижает apache activeMQ до версии 1.5.5. Поскольку этот проект должен выполняться как служба демона Apache Commons, я должен использовать свой собственный модуль запуска Spring Boot, который позволяет иметь статический модуль запуска и загрузчик классов. Эти два помогают мне остановить уже запущенную службу.

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

buildscript {

    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url 'https://repo.spring.io/libs-snapshot' }
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M7")
    }
}


plugins {
  id "org.sonarqube" version "2.6.1"
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'

ext {
    commonsDaemonVersion = '1.1.0'
    artemis = '2.4.0'
}

configurations {
    launcher
}

dependencies {

    compile("org.apache.activemq:artemis-server:${artemis}")
    compile("org.apache.activemq:artemis-core-client:${artemis}")

    compile("commons-daemon:commons-daemon:${commonsDaemonVersion}")

    launcher("com.mycompany.springboot.launcher:my-custom-launcher:0.1.0-RELEASE")
}   

bootJar {

    from project.configurations.launcher.each {
        from(zipTree(it))
    }


    manifest {
        attributes 'Main-Class': 'com.mycompany.springboot.launcher.CustomLauncher'
    }

}

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
}

В версии 1.5.x я мог просто использовать следующую опцию, чтобы добавить свою конфигурацию запуска:

springBoot  {
    layoutFactory = new com.mycompany.springboot.launcher.CustomLauncherFactory()
}

Есть ли какие-либо настройки, которые я мог бы использовать для добавления своей пользовательской панели запуска с плагином Spring Boot Gradle 2.x, или мне нужно использовать здесь какие-либо обходные пути?


person l_mcqueen    schedule 13.02.2018    source источник
comment
Я нашел решение заставить Spring Dependency Manager загружать Artemis 2.4.0, используя идею, описанную здесь я добавил следующую строку в свой файл build.gradle: ext['artemis.version'] = '2.4.0' что позволяет использовать плагин Spring Boot Gradle 1.5.10 в моем проекте (потому что Я могу использовать правильную версию Artemis, которая не будет понижена до 1.5.5). Это означает, что я также могу просто использовать настройку layoutFactory SpringBoot.   -  person l_mcqueen    schedule 14.02.2018


Ответы (1)


Я бы посоветовал изучить использование стартера Spring Boot для Artemis spring-boot-starter-artemis. Он должен раскрутить встроенный сервер без каких-либо трений.

person luboskrnac    schedule 13.02.2018
comment
Привет @luboskrnac, спасибо за ответ. Artemis Server действительно работает (у меня для этого есть другой стартер), это не моя проблема. Вопрос в том, как встроить в проект мой лаунчер, который должен запускать (а позже и останавливать) все Spring Boot Application. - person l_mcqueen; 14.02.2018