2017-06-09 52 views
0

我想用Spring启动Java中的微服务,为此我正在开发两个Web服务在不同的项目中,目的是像在两个独立的文件(.war)中一样在tomcat中部署它们。如何在没有依赖关系的情况下编译spring-boot-maven-plugin?

我已经阅读了关于设置tomcat以将指定文件夹中的依赖关系与其他服务共享的方法,并且这种方式不会增加所有服务中的相同库。

问题的关键在于,当我通过artifact spring-boot-maven-plugin编译maven服务时,.war文件始终具有依赖关系。因为我想知道是否有人知道如何配置maven到 删除.war文件中的依赖项.....在Spring Boot中。

.war跟在内部的依赖关系,编辑: 我已经添加了像提到的迈克尔波特和执行。它工作正常。我的pom.xml的是后续:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>demo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>demo1</name> 
    <description>Demo project for Spring Boot</description> 

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

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

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

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

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


</project> 

回答

0

Maven的不包括在WAR文件的依赖,需要指定其范围提供。从官方Maven文档描述范围:

这很像编译,但表示您期望JDK或 容器在运行时提供依赖关系。例如,当 构建Java企业版的Web应用程序时,您将 将Servlet API和相关Java EE API的依赖性设置为 ,因为Web容器提供了这些类。此 作用域仅在编译和测试类路径中可用,并且 不可传递。

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>1.4.192</version> 
    <scope>provided</scope> 
</dependency> 

的依赖将下载编译源代码,但不能装在WAR。

关于spring-boot-maven-plugin。默认情况下,它会重新打包WAR,允许您从控制台启动它。因此,它将所有必需的依赖关系打包到归档文件中 - 即使提供了范围。您可以在目标目录中看到两个文件:{project-name} .war这是重新打包的和{project-name} .war.original - 不应包含提供的依赖关系的文件。要禁用重新包装,你应该改变弹簧引导Maven的插件配置如下:

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

然后你需要将所需的相关地方的tomcat/lib目录文件夹,重新启动Tomcat。

+0

嗨。感谢您的帮助,但是它在春季启动时不起作用。我不知道原因。 –

+0

我编辑了这个问题,我添加了pom.xml,但它不是我的解决方案。 –

+0

您应该将测试依赖项(如spring-boot-starter-test)的测试作用域保留为与该作用域的依赖关系,不要打包为WAR。 –

相关问题