2017-02-17 15 views
3

Итак, я создаю веб-приложение весеннего сапога, упаковывая его в качестве войны и развертывая на сервере приложений tomcat.Сделать зависимость maven, предоставленную на основе активного профиля пружины

У меня есть следующая зависимость в моем pom.xml для кота:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 

Объема этой зависимости необходимо предоставить для того, чтобы иметь возможность развернуть его в TOMCAT инстанции. Тем не менее, когда я хочу запустить войну с помощью CLI весеннего загрузочного файла или с помощью конфигурации Spring Spring Spring по умолчанию, мне нужно удалить <scope>provided</scope>, чтобы он мог запустить встроенный tomcat.

Мой вопрос в том, есть ли способ сделать зависимость условно предоставленной на основе активного профиля пружины или какого-либо другого метода?

+0

В последний раз я попробовал (около 3 месяцев назад) я мог бы развернуть свою войну с котом, даже со встроенным-котом, содержащейся в Это. Он работал нормально. Война была немного больше, чем следовало! Не уверен, что этот подход все еще работает в последних версиях весенней загрузки. –

+2

Не ... Нет. На самом деле нет ... Оставьте его как предусмотрено и используйте задачу загрузки весны maven для запуска приложения из Intellij. Также при запуске войны не должно быть никаких проблем, поскольку весенние пакеты предоставляют зависимые в отдельном каталоге, которые все еще проверяются Spring Boot. –

+0

@ M.Deinum вы должны опубликовать это как ответ - это работает для меня –

ответ

2

Вы не можете контролировать зависимости через профили пружин. Однако вы можете контролировать профили пружины профилями maven, и это может решить вашу проблему.

Вы можете объявить несколько профилей maven в своем приложении и предоставить различные зависимости для каждого из них. Затем вы можете настроить профили maven для использования конкретного профиля пружины. Посмотрите on maven profiles и пример такой конфигурации in this thread

1

В вашем конкретном случае, вы можете просто сделать: В зависимости для запуска пружинной загрузки со встроенным котом:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
</dependency> 

И в профиле развернуть под котом

<profile> 
    <id>tomcat</id> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
</profile> 

после, чтобы построить для конкретного профиля

mvn clean install -Ptomcat 
0

Это решение, которое будет работать с обоими, баночка и войны упаковка:

pom.xml

... 
    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.4.RELEASE</version> 
     <relativePath /> <!-- lookup parent from repository --> 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 
    <artifactId>...</artifactId> 
    <groupId>...</groupId> 
    <version>0-SNAPSHOT</version> 
    <packaging>${packaging.type}</packaging> 
    ... 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <start-class>...</start-class> 
     <packaging.type>jar</packaging.type> 
    ... 
    </properties> 
    <dependencies> 
     <dependency> 
      <!-- Brings in Embedded Tomcat dependencies --> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
... 
    </dependencies> 

    <profiles> 
     <profile> 
      <id>tomcat-war</id> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
      <dependencies> 
       <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
        <scope>provided</scope> 
       </dependency> 
      </dependencies> 
    ... 
    </profiles> 

    <build> 
      <finalName>${project.artifactId}</finalName> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <goals> 
           <goal>repackage</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
    ... 

Построить артефакт в баночке:

mvn clean package 

Построить артефакт, как война:

mvn clean package -Ptomcat-war 

Основной класс, который идет в <start-class> в pom.xml:

package ... 

public class Application extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
}