如何用Maven属性替换web.xml中的值?

dok*_*par 40 parameters web.xml servlets maven

我有一个Maven项目,它将一些测试文件下载到它的构建目录中./target/files.然后,这些文件应该可用于servlet,我可以通过将完整路径硬编码为servlet来轻松实现<init-param>:

<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>
Run Code Online (Sandbox Code Playgroud)

如何避免硬编码完整路径并使用动态参数替换?我尝试了以下,但它不起作用:

<param-value>${project.build.directory}/files</param-value>
Run Code Online (Sandbox Code Playgroud)

And*_*wik 79

添加到您的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>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Maven:自定义web-app项目的web.xml

  • 什么在解决方案中实现更换? (4认同)

khm*_*ise 6

您可以简单地使用maven 过滤资源:

<build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

您也可以将此组合并希望过滤某些文件,而不应过滤其他文件:

   <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>
Run Code Online (Sandbox Code Playgroud)

将适当的占位符放入您想要替换$ {home}之类的文件中.