2015-09-21 4 views
20

Теперь я хочу разработать общую почтовую службу для наших систем. Как мы разрабатываем, мы хотим разработать производителя и потребителя RabbitMQ. С точки зрения потребителей мы могли бы разработать и развернуть приложение Spring Boot или Spring Cloud, но на стороне производителя мы хотим предоставить общий почтовый клиент, такой как интерфейс ниже, и сделать зависимость jar для другой системы.Как использовать весенний ботинок, создающий общую библиотеку

interface MailClient { 
    ListentableFuture send(Message message); 
} 

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

ответ

1

Согласно documentation:

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

Но весенний ботинок не является серебряной пулей, которая соответствует всем ситуациям. Если вы хотите создать библиотеку, вы можете создать регулярный весенний проект, который создает банку и хранит ее в репозитории вашей компании, если таковой имеется.

+3

Ответ Санджая ниже - правильный ответ. Документация Spring IO точно описывает эту проблему и показывает правильный способ реализации библиотеки для приложений Spring для загрузки: https://spring.io/guides/gs/multi-module/. Как указано в документации: ** Хотя плагин Spring Boot Maven не используется, вы хотите воспользоваться функцией управления загрузкой Spring Boot ** –

32

Spring Lemon будет хорошим примером для этого. Он использует Spring Boot и предназначен для включения в другие приложения Spring Boot. Это то, что мы сделали, чтобы создать его:

  1. Создано приложение Spring загрузки, используя Spring загрузки Starter мастера из STS.
  2. Удалено сгенерированное приложение и тестовый класс.
  3. Удалены spring-boot-maven-plugin, т.е. сборки и pluginRepositories секций в pom.xml. (Смотрите, как выглядит pom.xml без этих разделов).
+8

Это правильный ответ. –

+1

@sanjay И где вы используете Spring Lemon как зависимость, добавляете ли вы эту аннотацию '@SpringBootApplication (scanBasePackages = {" com.naturalprogrammer.spring "})' к основному классу, в котором вы запускаете приложение. Другими словами, как вы уроните все классы в Spring Lemon, чтобы Spring справлялся с этим, если вы знаете, что я имею в виду. –

+0

Правильно, в https://github.com/naturalprogrammer/lemon-demo Я использовал '@SpringBootApplication (scanBasePackageClasses = {LemonDemoApplication.class, LemonConfig.class})'. (AutoConfiguration также можно попробовать, я думаю, но это работает хорошо) – Sanjay

7

В документации Spring решает эту проблему точно и показывает правильный способ реализации общей библиотеки с/весна загрузки:

https://spring.io/guides/gs/multi-module/

В документации состояний: Хотя плагин Spring Загрузочный Maven не используется, вы хотите использовать управление зависимостями Spring Boot.

0

У меня была подобная необходимость, как ваша, до сих пор мне удалось построить библиотеку можно использовать на других проектах с следующей конфигурацией:

`

<modelVersion>4.0.0</modelVersion> 
<groupId>mx.grailscoder</groupId> 
<artifactId>library</artifactId> 
<version>1.0-SNAPSHOT</version> 
<name>My Custom Library built on Spring Boot</name> 
<description>Spring Boot Project library</description> 
<packaging>jar</packaging> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.4.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 
<properties> 
    <java.version>1.8</java.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <logentries-appender>RELEASE</logentries-appender> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

`

Важно отметить I пропустил задачу repackage, так как в моей библиотеке не было никакого основного класса, тогда выпуск задачи mvn install не прерывается.

Смежные вопросы