2014-09-23 4 views
12

Я хочу создать военный файл без встроенного tomcat с maven. Вот соответствующая часть моего ПВесенняя ботинок войны без tomcat embedded

... 
<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.6.RELEASE</version> 
</parent> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</artifactId> 
    </dependency> 
    <!-- Add tomcat only if I want to run directly --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 
... 

Как всегда, если я бег МВЕН пакета получает войну, где кот * .jar находится в условии Пб папки, но все еще в Lib-папке. Я читал build-tool-plugins-maven-packaging, но не могу найти, что не так.

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

+0

Тот факт, что банки все еще там, не означает, что вы не можете развернуть его как войну. Вы можете полностью развернуть его, как есть. Убедитесь, что вы исключили tomcat из зависимости 'spring-boot-starter-web'. –

+0

Спасибо, что это было. – niels

+1

@niels, вы отредактировали этот вопрос, а так как ревизия * 2 * включает ответ на ваш вопрос. Как насчет возврата к вашему первоначальному ответу и предоставления отдельного ответа? – Abdull

ответ

17

Следуя подсказке М. Дейнума, я исключил проблему кота.

Со следующим pom.xml (соответствующий фрагмент) maven clean package имеет результат, который я не получу.

... 
<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.6.RELEASE</version> 
</parent> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</artifactId> 
    </dependency> 
    <!-- Add tomcat only if I want to run directly --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 
... 
+0

Но если компилятор весна-boot-starter-tomcat прокомментирован, как вы запускаете приложение? Я попробовал это так и развернул его в контейнер tomcat, но затем получил сообщения об ошибках. Все похожие на: org.apache.catalina.startup.ContextConfig checkHandlesTypes ВНИМАНИЕ: Не удается загрузить класс [org.apache.tomcat.util.descriptor.web.NameRule], чтобы проверить аннотацию @HandlesTypes одного или нескольких ServletContentInitializers. java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.web.NameRule и т. Д. –

+0

Вы можете развернуть войну в произвольном контейнере сервлетов. Если вашему приложению не нужны классы tomcat, он отлично работает. Возможно ли, что вам нужно во время компиляции tomcat-классов? Как вы скомпилируете? mvn из командной строки? Убедитесь, что вы сделали mvn clean в начале. – niels

+0

Я использую gradle, я уже понял это. Процесс сборки (bootRepackage) создает два артефакта: один с одним и без встроенного контейнера Tomcat. Оказалось, что я принял неверный артефакт для внешнего развертывания Tomcat - тогда должен взять войну без встроенного Tomcat. –

6

Я не уверен, что это способ загрузки с пружинной загрузкой, но вы можете исключить банки tomcat, используя конфигурацию maven-war-plugin. То есть, добавьте следующие строки в pom.xml:

<build> 
    <plugins> 
     ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Используя этот подход, война генерироваться не является исполняемым (не может быть запущен из командной строки с помощью Java -jar), но могут быть использованы только в любом контейнере сервлетов

3

У меня была такая же потребность, но удаление указанной зависимости не сработало. Я смог получить файл WAR, добавив эту зависимость <packaging>war</packaging> к моему файлу pom.

Я использовал эту статью Spring в качестве руководства ..., так что это может помочь другим людям.