2014-09-23 24 views
12

Tôi muốn tạo tệp chiến tranh mà không cần tomcat nhúng với maven. Đây là phần có liên quan của pom tôichiến tranh khởi động mùa xuân mà không cần tomcat nhúng

... 
<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> 
... 

Làm thế nào bao giờ hết nếu tôi chạy gói mvn tôi nhận được một cuộc chiến tranh, nơi tomcat * .jar đang ở trong một thư mục được cung cấp-lib nhưng vẫn còn trong lib thư mục. Tôi đọc build-tool-plugins-maven-packaging nhưng không thể tìm thấy điều gì sai.

Tôi biết một ý tưởng chính là chạy nó như một ứng dụng, bao giờ khách hàng của chúng tôi muốn triển khai nó trên máy chủ ứng dụng của mình.

+0

Thực tế là các lọ vẫn còn đó không có nghĩa là bạn không thể triển khai nó như một cuộc chiến tranh. Bạn hoàn toàn có thể triển khai nó như là. Đảm bảo rằng bạn loại trừ tomcat khỏi phụ thuộc 'spring-boot-starter-web'. –

+0

Cảm ơn đó là nó. – niels

+1

@niels, bạn đã chỉnh sửa câu hỏi này và kể từ khi sửa đổi * 2 * nó bao gồm câu trả lời cho câu hỏi của bạn. Điều gì về hoàn nguyên câu trả lời ban đầu của bạn và cung cấp câu trả lời riêng? – Abdull

Trả lời

17

Làm theo các gợi ý từ M. Deinum tôi loại trừ sự thiếu hụt tomcat.

Với tệp pom.xml sau (đoạn mã liên quan) maven clean package có kết quả tôi không thể nhận được.

... 
<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

Nhưng nếu spring-boot-starter-tomcat được nhận xét, bạn chạy ứng dụng như thế nào? Tôi đã thử nó theo cách này, và triển khai nó vào một container tomcat, nhưng có thông báo lỗi sau đó. Tất cả tương tự như: org.apache.catalina.startup.ContextConfig checkHandlesTypes CẢNH BÁO: Không thể tải lớp [org.apache.tomcat.util.descriptor.web.NameRule] để kiểm tra chú thích @HandlesTypes của một hoặc nhiều ServletContentInitializers. java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.web.NameRule, v.v. –

+0

Bạn có thể triển khai chiến tranh trong một thùng chứa servlet tùy ý. Nếu ứng dụng của bạn không cần các lớp tomcat thì nó hoạt động tốt theo cách này. Có thể bạn cần tại thời gian biên dịch các lớp tomcat? Làm thế nào để bạn biên dịch? mvn từ dòng lệnh? Hãy chắc chắn rằng bạn làm sạch mvn ngay từ đầu. – niels

+0

Tôi sử dụng gradle, tôi đã tìm ra nó. Quá trình xây dựng (bootRepackage) tạo ra hai tạo tác, một với và một không có thùng chứa Tomcat được nhúng. Hóa ra, tôi đã tạo ra một tạo phẩm sai cho việc triển khai Tomcat bên ngoài - nên thực hiện cuộc chiến mà không cần Tomcat nhúng. –

6

Tôi không chắc đó có phải là cách khởi động mùa xuân để thực hiện nó hay không, nhưng bạn có thể loại trừ các lọ tomcat bằng cách sử dụng cấu hình maven-war-plugin. Đó là, thêm dòng sau vào pom.xml của bạn:

<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> 

Sử dụng phương pháp này, chiến tranh tạo ra là không thực thi (không thể chạy trên dòng lệnh sử dụng java -jar) nhưng chỉ có thể được triển khai tới bất kỳ container servlet

3

Tôi có cùng nhu cầu này nhưng việc xóa phụ thuộc đã đề cập không hiệu quả. Tôi đã có thể nhận được tệp WAR bằng cách thêm phụ thuộc này <packaging>war</packaging> vào tệp pom của tôi.

Tôi đã sử dụng bài viết này Spring làm hướng dẫn ... chia sẻ để điều này cũng có thể giúp người khác.

Các vấn đề liên quan