当前位置: 首页 > 知识库问答 >
问题:

如何在没有依赖项的情况下编译spring-boot-maven-plugin?

封弘伟
2023-03-14

问题在于,当我通过工件spring-boot-maven-plugin用maven编译服务时,.war文件内部总是有依赖关系。因为我想知道是否有人知道如何配置maven来删除.war文件中的依赖项......穿着春靴。

war随后出现了里面的依赖关系,经过编辑:我已经添加了提供的,就像Michael Potter所说的和执行一样。很好用。我的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>

共有1个答案

汝吕恭
2023-03-14

为了使Maven不在WAR文件中包含依赖项,您需要将其作用域指定为提供。来自官方Maven文档的范围描述:

这与编译非常相似,但表明您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建web应用程序时,您可以将对Servlet API和相关Java EE API的依赖项设置为所提供的范围,因为web容器提供了这些类。此作用域仅在编译类路径和测试类路径上可用,且不可传递。

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

该依赖项将被下载来编译源代码,但不打包在战争中。

<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>
 类似资料:
  • 我正在编写一个spring-mvc应用程序(并学习spring-mvc)。我没有向pom.xml添加servlet依赖项。当我运行或时,它会成功地完成。不是应该抛出类似“can not find javax.servlet.http.HttpServlet”这样的异常吗?它是如何编译的?

  • 我正在尝试安装一个没有依赖项的python模块。 我跑: 但是这个安装依赖项,任何想法怎么能做到这一点?

  • 我有一个多项目gradle项目,结构如下。 从顶层“Project A”运行Gradle任务时,一切都正常工作 但是,当我尝试在子项目(如“subproject C”)上运行单个任务时,会出现以下错误。 失败:构建失败,但有一个异常 出了什么问题: 评估根项目“SubProject C”时出现问题。 在根项目“SubProject C”中找不到带有路径“: Shared”的项目。 我想我看到了问题

  • 问题内容: 有一个Java文件,其中包含一些依赖项jar。但是现在,我没有那些jars,必须将其编译为.class文件。 是否有可能做到这一点? 更新 感谢您的回答。 起初,我认为我们可以为缺少的依赖项创建一些存根,这很简单但是很无聊。既然我们可以创建存根而不会丢失存根以使编译器满意,那么为什么我们不能使工具自动完成呢?该工具不需要创建存根,而是读取java文件,收集信息,然后构建.class文件

  • 问题内容: 如果你看一下课堂上的代码,我有两个问题: 服务器启动时,如果我在此类的构造函数中放置一个断点,就像在构造函数中那样,它是由spring使用配置的bean 提供的。但是,构造函数上没有注释,那么,在这个世界中如何以正确的依赖关系调用该构造函数?应该是null。 这是Spring Boot的自动假设吗? Spring是否看到“私有字段+构造函数参数”,并且假定它应该寻找合适的bean? 是

  • 问题内容: 我有一个Maven项目,我通常可以从eclipse编译并运行它,但是当我从命令行编译它时,它的依赖项丢失了,并且出现了错误。只有下载依赖项并将它们添加到c:/ Java / jdk / jre / lib / ext后,我才能编译项目 如何从控制台行编译项目及其依赖项,而无需将其手动添加到jdk?编译器可以以某种方式读取Maven依赖项吗? pom.xml 问题答案: 从具有某些mav