Jac*_*erk 16 java maven-2 war package phase
我有一个带有文本文件的Maven Web应用程序
的src /主/ web应用/ textfilesdir
据我了解,在包阶段,这个textfilesdir目录将被复制到
目标/项目-1.0-快照
目录,然后压缩成一个
目标/项目-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}等属性.字符串替换可能是唯一的选择.
选项
在创建WAR之前,将文本文件复制到target/project-1.0-SNAPSHOT目录之后进行修改.
打包后,从WAR中提取文本文件,修改它们,然后将它们添加回WAR.
我想在这里还有另一种选择我不在了.想什么?
小智 7
我有同样的问题,而且我在这个问题上摆弄了很多,所以我会回答这个问题已经很久了.正如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>
Run Code Online (Sandbox Code Playgroud)
在真正的战争建立之前,我们制造了一场爆炸性战争.这意味着,war文件的整个内容存储在子目录中(默认情况下为target/$ {project.build.finalName}).之后,maven-replacer-plugin将按照我们的指定更改文件的内容.最后,.war将在工作的包装阶段打包default-war.为了避免重写爆炸的war文件夹的内容,必须设置warSourceDirectory存储爆炸的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>
Run Code Online (Sandbox Code Playgroud)
可以使用构建具有替换内容的包
mvn clean package
选项 1 不可行,prepare-package为时过早,package为时已晚,所以我不知道您可以在哪里插入任何自定义工作。选项 2 是可行的,但 IMO 很痛苦。所以这里有更多的建议(都基于 AntRun 和ReplaceRegExp和/或Replace任务)。
解决方案1:
prepare-package并配置它处理文件并将处理后的文件放在target(例如target/textfilesdir)下的某个目录中。target/textfilesdir为webResource. 有关详细信息,请参阅添加和过滤外部 Web 资源。解决方案2:
prepare-package并将其配置为处理来自文本文件src/main/webapp/textfilesdir,并把处理的文件中target/project-1.0-SNAPSHOT。我想我会选择第二种解决方案。