Maven War插件不会忘记旧文件和依赖项,并且会创建包含已删除文件和依赖项的战争

时间:2018-09-03 15:46:52

标签: java maven intellij-idea war maven-war-plugin

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

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

我想我用得很厉害...我应该做些什么让他“忘记”历史​​并强迫他在开战时考虑这个项目吗?

感谢您的帮助!

PS:

  • 在进行war:war之前,我总是清理并编译
  • 我与IntelliJ IDEA社区2017.3合作
  • 由于技术限制,使用jdk 1.7。

为了完整起见,这里有我的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,它看起来就可以工作(至少已部署)。

1 个答案:

答案 0 :(得分:1)

对我来说,这只是很多技巧,

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

现在,替换那些备份的依赖项,然后重新构建Webapp。所有错误都将消失,war文件将按预期进行。