当前位置: 首页 > 知识库问答 >
问题:

如何将网页.xml中的值替换为 Maven 属性?

阎弘雅
2023-03-14

我有一个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>

共有3个答案

贺子昂
2023-03-14

您可以使用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
江同化
2023-03-14

您只需使用 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}之类内容的文件中。

丰佐
2023-03-14

添加到您的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中使用属性值的名称来替换属性值?