java - 文本 Web 资源的 Maven 字符串替换

标签 java maven-2 package war phase

我有一个带有文本文件的 Maven Web 应用程序

src/main/webapp/textfilesdir

据我了解,在打包阶段,这个 textfilesdir 目录将被复制到

target/project-1.0-SNAPSHOT

目录,然后压缩成一个

target/project-1.0-SNAPSHOT.war

问题

现在,我需要对 target/project-1.0-SNAPSHOT/textfilesdir 中的文本文件的内容进行字符串替换。这必须在将 textfilesdir 复制到 target/project-1.0-SNAPSHOT 之后,但在创建 target/project-1.0-SNAPSHOT.war 文件之前完成。我相信这一切都是在打包阶段完成的。

插件(可能是 maven-antrun-plugin)如何插入包阶段来执行此操作。

文本文件不包含要过滤的属性,例如 ${property-name}。字符串替换可能是唯一的选择。

选项

  1. 在复制到 target/project-1.0-SNAPSHOT 目录之后,但在创建 WAR 之前修改文本文件。

  2. 打包后,将WAR中的文本文件解压,修改,再添加回WAR中。

我想我还缺少另一个选项。有人想过吗?

最佳答案

我遇到了同样的问题,而且我一直在摆弄这个问题,所以尽管这个问题已经很老了,但我还是会回答。正如 leandro 和 Phil 所说,可以使用 maven-replacer-plugin。但是他们的解决方案对我不起作用。启用 useCache 导致无法构建项目的错误。此外,我无法让自动清洁功能正常工作。 由于还不允许我对帖子发表评论,因此我将在此处提供完整的解决方案:

首先,配置maven-replacer-plugin:

<plugin> 
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>maven-replacer-plugin</artifactId>
  <version>1.3.7</version>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals>
        <goal>replace</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <includes>
      <include>target/${project.build.finalName}/static/**/*.css</include>
    </includes>
    <regex>false</regex>
    <token>someString</token>
    <value>replaceString</value>
  </configuration>
</plugin>

在构建实际 war 之前,我们先创建一个爆炸 war 。这意味着,war 文件的全部内容都存储在子目录中(默认情况下为 target/${project.build.finalName})。之后,maven-replacer-plugin 将按照我们指定的方式更改文件的内容。最后,.war 将由 default-war 作业在 package 阶段打包。为避免覆盖 exploded war 文件夹的内容,必须将 warSourceDirectory 设置为存储 exploded war 内容的目录。以下配置片段将完成这项工作:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1.1</version>
  <executions>
    <execution>
      <id>prepare</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>exploded</goal>
  </goals>
    </execution>
    <execution> 
      <id>default-war</id>
      <phase>package</phase>
      <goals>
        <goal>war</goal>
      </goals>
      <configuration>
        <warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

可以使用替换内容构建包 mvn clean package

关于java - 文本 Web 资源的 Maven 字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018405/

相关文章:

java - Eclipse:自动完成类名时排除特定包

unit-testing - gmaven 没有找到测试

java - 使用 Exchange Web 服务的 Maven 项目中缺少类

Python 管理存储库 Pycharm

java - 找不到 Gson 模块 Blackberry Java 应用程序

java - Android 自动完成 TextView 显示以前的输入

java - 如何正确实现抽屉导航中的顶部后退按钮?

java - Nexus/Maven 可以同时存储 32 位和 64 位工件吗?

plugins - Sublime Text 2 多文件包开发,无需重启

perl - 在 Perl 中,您如何动态选择要用作回调的方法?