我有一个Maven项目,它将一些测试文件下载到其构建目录./target/files
中。这些文件应该可以用于servlet,我可以通过将完整路径硬编码为来轻松实现
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>my.package.TestServlet</servlet-class>
<init-param>
<param-name>filepath</param-name>
<param-value>/home/user/testproject/target/files</param-value>
</init-param>
</servlet>
如何避免对完整路径进行硬编码并改用动态参数替换?我尝试了以下方法,但不起作用:
<param-value>${project.build.directory}/files</param-value>
您可以使用ReplaceAntTask来完成此任务。
下面是一个示例实现,其中我替换属性文件中的令牌键,对其进行调整以满足您的需求
测试.属性
SERVER_NAME=@SERVER_NAME@
PROFILE_NAME=@PROFILE_NAME@
pom.xml
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<tasks>
<replace dir="${basedir}/src/main/resources" >
<include name="**/*.properties"/>
<replacefilter token="@SERVER_NAME@" value="My Server"/>
<replacefilter token="@PROFILE_NAME@" value="My Profile"/>
</replace>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
瞧!现在执行
mvn clean package
您只需使用 maven 过滤资源:
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
</resources>
...
</build>
...
</project>
您也可以将其结合起来并希望过滤某些文件,而其他文件不应被过滤:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
...
</resources>
将适当的占位符放入要替换${home}之类内容的文件中。
添加到您的pom部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>**/web.xml</include>
</includes>
</resource>
</webResources>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
请参阅Maven:自定义web。web应用程序项目的xml以了解更多详细信息
//从map2到map1或newMap中的键的值 //如何将值重新放置到键?在新地图中
在将项目安装到(本地)maven存储库中时,我想用当前的实际值替换所有属性占位符,这有可能吗? 总之,我试图在maven中创建一个可定制的项目版本,以解决一些具有可传递依赖关系的问题。 这是我的最小化pom。xml: 在“mvn清理安装”之后,我希望在本地maven存储库中有“~/.m2/repository/com/foo/T/TEST/T-TEST.pom”以下内容: 因此,在将项目安装到ma
问题内容: 我有一个包含客户端和服务器组件的项目。两者都有自己的Maven多模块构建项目。 各个前端模块中必须引用正确的服务器版本。为此,我在客户端父POM中设置了一个属性,如下所示: 现在,我想在Jenkins构建作业期间/之后更新 POM中 的版本号(即,不只是使用-D …从命令行中注入其他版本)。有没有办法做到这一点? 问题答案: 我发现了适用于我的情况的Maven插件。它接受一个xpath
我得到了一个导入的文本块,但格式并不总是那么完美。之后我会尝试用jquery解决这个问题。所以我开始用 替换 : null null 但替换不起作用。最终的html应该如下所示:
我有一个带有servlet 3.1的web应用程序,还有一个没有@WebFilter注释的servlet filter,并且工作正常。 我想用@WebServlet注释替换它,但使用相同的旧过滤器,而不创建新的过滤器类,并在旧过滤器类中使用@WebFilter。下面是我web.xml档案。 我试图用下面的servlet替换它。 我没有找到任何过滤器映射和安全约束的注释。 你能帮我吗?
我需要使用属性名称替换xml文件中的属性值。 前任: 我有一个替换此值的目标。i、 e“默认值”。如果用户为属性测试名称指定了错误的值,则可以多次运行此目标。用户可以使用正确的值重试运行目标。因此,我不能使用正则表达式替换。我只能依靠物业名称。有没有一种方法可以在ant中使用属性值的名称来替换属性值?