Java 如何编译没有依赖项的SpringBootMaven插件?
我正在尝试使用Spring boot在Java中使用微服务进行练习,为此我在不同的项目中开发了两个web服务,目的是将它们像两个独立的文件(.war)一样部署在tomcat中 我读过关于将tomcat设置为在指定文件夹中具有依赖项,以便与其他服务共享它,并且通过这种方式不增加所有服务中的相同库 问题是,当我通过工件SpringBootMaven插件用maven编译服务时,.war文件中总是包含依赖项。因为我想知道是否有人知道如何将maven配置为 从.war文件中删除依赖项。。。。。在春天的靴子里 .war之后是内部的依赖项,已编辑: 我已经添加了迈克尔·波特所说的内容和死刑。它很好用。我的pom.xml如下所示: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文件中删除依赖项。。。。。在春天的靴子
<?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>