Java 如何编译没有依赖项的SpringBootMaven插件?

Java 如何编译没有依赖项的SpringBootMaven插件?,java,spring,maven,spring-mvc,tomcat,Java,Spring,Maven,Spring Mvc,Tomcat,我正在尝试使用Spring boot在Java中使用微服务进行练习,为此我在不同的项目中开发了两个web服务,目的是将它们像两个独立的文件(.war)一样部署在tomcat中 我读过关于将tomcat设置为在指定文件夹中具有依赖项,以便与其他服务共享它,并且通过这种方式不增加所有服务中的相同库 问题是,当我通过工件SpringBootMaven插件用maven编译服务时,.war文件中总是包含依赖项。因为我想知道是否有人知道如何将maven配置为 从.war文件中删除依赖项。。。。。在春天的靴子

我正在尝试使用Spring boot在Java中使用微服务进行练习,为此我在不同的项目中开发了两个web服务,目的是将它们像两个独立的文件(.war)一样部署在tomcat中

我读过关于将tomcat设置为在指定文件夹中具有依赖项,以便与其他服务共享它,并且通过这种方式不增加所有服务中的相同库

问题是,当我通过工件SpringBootMaven插件用maven编译服务时,.war文件中总是包含依赖项。因为我想知道是否有人知道如何将maven配置为 从.war文件中删除依赖项。。。。。在春天的靴子里

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

4.0.0
com.example
演示
0.0.1-快照
战争
演示1
SpringBoot的演示项目
org.springframework.boot
spring启动程序父级
1.5.4.1发布
UTF-8
UTF-8
1.8
org.springframework.boot
SpringBootStarterWeb
假如
org.springframework.boot
弹簧起动试验
假如
org.springframework.boot
springbootmaven插件
重新包装
真的

要使Maven不在WAR文件中包含依赖项,您需要将其范围指定为提供的。Maven官方文档中的范围说明:

这与compile非常相似,但表示您希望使用JDK或 容器在运行时提供依赖项。例如,当 要为Java企业版构建web应用程序,您需要 将ServletAPI和相关JavaEEAPI的依赖关系设置为 提供范围,因为web容器提供这些类。这 作用域仅在编译和测试类路径上可用,并且 不及物


com.h2数据库
氢
1.4.192
假如
依赖项将被下载以编译源代码,但不会在战争中打包

关于SpringBootMaven插件。默认情况下,它对WAR进行重新打包,允许您从控制台启动WAR。因此,它将所有必需的依赖项打包到存档中,即使提供了范围。您可以在目标目录中看到两个文件:{project name}.war(已重新打包)和{project name}.war.original(不应包含提供的依赖项的文件)。要禁用重新打包,应将spring boot 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>

org.springframework.boot
springbootmaven插件
重新包装
真的

然后,您需要将所需的依赖项放到tomcat/lib文件夹中,并重新启动tomcat

嗨。感谢您的帮助,但是它在spring boot中不起作用。我不知道原因。我已经编辑了这个问题,并添加了pom.xml,但它不是我的解决方案。您应该为测试依赖项(如spring boot starter test)留下测试范围,因为具有该范围的依赖项或者不打包到WAR。@J.Abel,我用有关spring boot maven插件的信息扩展了响应。它应该有助于消除WARHi中的依赖关系。“它起作用了!”!,感谢@Michael Potter,插件的范围和执行都很好。
<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>