java - maven 战争插件不会忘记旧文件和依赖项,并创建一个包含已删除文件和依赖项的战争
问题描述
你好我有一个关于战争创造的奇怪问题。
我使用 maven-war-plugin(尝试使用 3.1.0、3.2.0 和 2.6)。当我运行 war:war (或mvn clean package
,或类似的)时,会创建战争,但我注意到它总是打包它在项目历史中遇到的所有文件和依赖项。我注意到了这一点,因为 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 它看起来它可以工作(至少它已部署)。
解决方案
这只是一个对我有用很多次的技巧,
从 pom.xml 备份您的依赖项并将其删除。进行干净的构建,它将在所有 Java 类中显示错误。也删除了之前的战争。
现在,替换那些备份的依赖项并再次清理构建 webapp。所有错误都将消失,war 文件将按预期进行。
推荐阅读
- php - 忽略空文件夹(403)并使用 .htaccess 将 URI 传递给 Laravel 控制器
- mysql - 是否可以为 MySQL 索引指定排序顺序?
- javascript - 如何连接来自 2 个数组的数据
- mysql - mysql选择具有特定值的不同n行
- firebase - 您如何从 firestore 获取文档集合并将其转换为 Flutter 列表?
- android - 快照与当前 VM 配置不兼容
- android - android startActivity 没有在无障碍服务中启动活动
- javascript - 如何在 Angular 9 应用程序中获取电子 autoUpdater 实例?
- android - 为什么`android ServerSocket().accept().getInputStream().read()` 这么慢?
- angular - 如何在http请求角度添加令牌