首页 > 解决方案 > maven 战争插件不会忘记旧文件和依赖项,并创建一个包含已删除文件和依赖项的战争

问题描述

你好我有一个关于战争创造的奇怪问题。

我使用 maven-war-plugin(尝试使用 3.1.0、3.2.0 和 2.6)。当我运行 war:war (或mvn clean package,或类似的)时,会创建战争,但我注意到它总是打包它在项目历史中遇到的所有文件和依赖项。我注意到了这一点,因为 war 文件总是越来越大,通过打开它,我看到我在 pom 上声明了很多依赖项,但现在它们被删除了,最重要的是,我从项目中删除了一些类!我什至尝试开始一个新项目,结果没有改变。

我想我用得不好......我应该做些什么让他“忘记”历史​​并迫使它在创造战争时考虑“原样”这个项目?

谢谢您的帮助!

PS:

为了完整起见,有我的 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>sduca-consumer-listener</groupId>
    <artifactId>sduca-consumer-listener</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <webappDirectory>/sduca</webappDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- Using Spring 4 because of jdk 1.7 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.18.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
</project>

EDIT1:我尝试更改 maven-war-plugin、maven-compiler-plugin 和 Maven 本身的版本,但没有任何变化。

EDIT2:我尝试更改输出目录,没有更改。我试图更改依赖项的版本,并且“预期”现在战争包括两个版本,变得越来越大......

EDIT3:我重新安装了 IntelliJ IDEA,升级到最新版本。没有任何改变,它只是重置了包的内容,但它仍然“跟踪”内容和依赖关系,并且在创建新包时仍然包括包中删除的内容。

EDIT4:我已经开始使用mvn clean compile war:war而不是,mvn clean package起初事情开始起作用,但随后又出现了现有旧文件的问题。但是,我发现如果我从战争中手动删除超出的资源和 *.class 它看起来它可以工作(至少它已部署)。

标签: javamavenintellij-ideawarmaven-war-plugin

解决方案


这只是一个对我有用很多次的技巧,

从 pom.xml 备份您的依赖项并将其删除。进行干净的构建,它将在所有 Java 类中显示错误。也删除了之前的战争。

现在,替换那些备份的依赖项并再次清理构建 webapp。所有错误都将消失,war 文件将按预期进行。


推荐阅读