Подтвердить что ты не робот

Как заменить значение в web.xml свойством Maven?

У меня есть проект Maven, который загружает некоторые тестовые файлы в его каталог сборки ./target/files. Эти файлы затем должны быть доступны сервлету, который я могу легко достичь путем жесткого кодирования полного пути как <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>

Как я могу избежать жесткого кодирования полного пути и вместо этого использовать замену динамических параметров? Я попробовал следующее, но это не сработало:

<param-value>${project.build.directory}/files</param-value>
4b9b3361

Ответ 1

Добавить в раздел 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.xml проекта веб-приложения для более подробной информации

Ответ 2

Вы можете использовать Заменить Ant Задача, чтобы сделать это.

Вот пример реализации, в котором я заменяю tokenkeys в файле свойств, адаптирую его в соответствии с вашими потребностями.

test.properties

[email protected][email protected]
[email protected][email protected]

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="@[email protected]" value="My Server"/>
             <replacefilter     token="@[email protected]" value="My Profile"/>
            </replace>             

          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin> 

вуаля! Теперь выполните

mvn clean package

Ответ 3

Вы можете просто использовать 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}.

Ответ 4

Я думаю, вы можете использовать параметр maven-war-plugin filteringDeploymentDescriptors для фильтрации дескрипторов развертывания -

<properties>
    <maven.war.filteringDeploymentDescriptors>true</maven.war.filteringDeploymentDescriptors>
</properties>

Ответ 5

Параметры кодирования maven в web.xml не могут работать напрямую, потому что во время выполнения, когда ваше приложение запускается, maven завершил свою работу, и приложение не знает о maven.

Вы можете отфильтровать альтернативный web.xml(см. фильтрацию maven: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html) и использовать его при построении войны (см. webXml параметр в документации к плагину войны: http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html)