【问题标题】:maven: war:war rebuilds war even when content unchanged - why?maven:war:war 重建战争,即使内容不变 - 为什么?
【发布时间】:2012-02-11 15:19:27
【问题描述】:

当我尝试从 netbeans 构建 ear 项目时,为什么 maven ear 插件会运行 war:war(插件目标)

我的过程:

我右键单击 ear 项目(列出了 war 依赖项),首先清理,然后右键单击它并选择 Build with Dependencies。然后它使用 war:war 再次构建战争,这需要时间。即使战争没有改变,但会重新创造它。

这就是它所说的:

----------------------------------- ------------------------- 构建 finweb 1.0-SNAPSHOT -------------------------------------------------- ---------------------- org.netbeans.external:jdom-1.0:jar:RELEASE71 的 POM 丢失, 没有可用的依赖信息 com.ibm:com.ibm.mq:jar:6.0.2.5 缺失,没有依赖信息 available com.ibm:com.ibm.mqbind:jar:6.0.2.5 的 POM 丢失, 没有可用的依赖信息 net.sf.saxon:saxon:jar:10.0-b19 缺失,没有依赖信息 可用

[依赖:复制]

[resources:resources] 使用 'UTF-8' 编码复制过滤 资源。跳过不存在的资源目录 C:\Beta\fin\finweb\src\main\resources

[compiler:compile] 无需编译 - 所有类都是最新的

[resources:testResources] 使用 'UTF-8' 编码复制过滤 资源。跳过不存在的资源目录 C:\Beta\fin\finweb\src\test\resources

[compiler:testCompile] 无需编译 - 所有类都是最新的

[surefire:test] 没有要运行的测试。 Surefire 报告目录: C:\Beta\fin\finweb\target\surefire-reports

----------------------------------- -------- T E S T S -------------------------------------------------- ----- 没有要运行的测试。

结果:

测试运行:0,失败:0,错误:0,跳过:0

[war:war] 打包 webapp 组装 webapp [finweb] in [C:\Beta\fin\finweb\target\finweb-1.0-SNAPSHOT] 处理战争 项目复制 webapp 资源 [C:\Beta\fin\finweb\src\main\webapp] Webapp 组装在 [109467 毫秒]建设战争: C:\Beta\fin\finweb\target\finweb-1.0-SNAPSHOT.war WEB-INF\web.xml 已添加,跳过

[安装:安装] 安装 C:\Beta\fin\finweb\target\finweb-1.0-SNAPSHOT.war 到 C:\Documents 和 Settings.m2\repository\com\comp\finweb\1.0-SNAPSHOT\finweb-1.0-SNAPSHOT.war 将 C:\Beta\fin\finweb\pom.xml 安装到 C:\Documents 和 Settings\5510041.m2\repository\com\comp\finweb\1.0-SNAPSHOT\finweb-1.0-SNAPSHOT.pom

因此,如果没有要编译的内容,如果已经进行并且没有更改,为什么还要再次发起战争。这是默认行为吗,查看 compile :如果不需要,则在不编译时进行编译,那么为什么 war:war 会这样做,它应该很聪明才能做到这一点?

如果我错了,请纠正我

提前谢谢..

赛义德。

【问题讨论】:

    标签: maven war


    【解决方案1】:

    这可能被视为解决方法。
    以下配置将加快您的构建时间。

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-war-plugin</artifactId>
     <version>2.4</version>
     <configuration>
      <useCache>true</useCache>
      <recompressZippedFiles>false</recompressZippedFiles>
     </configuration>
    </plugin>
    

    参考:https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html

    我也期待从 maven 默认构建生命周期中跳过 war:war 阶段的简单方法。

    【讨论】:

      【解决方案2】:

      您的担忧可以理解。但原则上 maven-war-plugin 并不知道生成的 WAR 工件将与一分钟前构建的工件相同,因为:

      • 您可以定义包含当前构建时间的MANIFEST 条目。
      • 您可能会启用不同的配置文件,这将彻底改变图片。
      • 其他插件(如 maven-ant-plugin、maven-dependency-plugin)可能会根据某些变化条件(例如命令行中的属性)向目标目录添加一些内容。

      所以每次重建战争更安全。在现代平台上,这真的可以忽略不计。

      【讨论】:

      • “在现代平台上,这真的可以忽略不计” - 他的输出显示“Webapp 组装时间为 [109467 毫秒]”,接近两分钟。
      • 我同意,可能有需要改进的地方,但在一般情况下,优化问题很难解决,可能会导致其他副作用。您可能会考虑其他加快构建速度的方法,例如创建内存 fs (tmpfs) 并在那里构建您的项目。内存芯片很便宜:)
      • 那么 mvn clean 是干什么用的?
      • 您的意思是mvn clean 应该以某种方式加快构建速度?我怀疑:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2020-08-29
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2011-09-18
      • 2015-01-17
      相关资源
      最近更新 更多