web-dev-qa-db-ja.com

web.xmlの値をMavenプロパティに置き換える方法は?

ビルドディレクトリ./target/filesにいくつかのテストファイルをダウンロードするMavenプロジェクトがあります。これらのファイルは、サーブレットで使用できるようになります。これは、サーブレットの<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>
40
dokaspar

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-appプロジェクトのweb.xmlのカスタマイズ を参照してください

77
Andrzej Jozwik

単純に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}などを置き換えたいファイルに適切なプレースホルダーを配置します。

6
khmarbaise

Antタスクの置換 を使用して実行できます。

プロパティファイルのトークンキーを置き換えて、ニーズに合わせて調整するサンプル実装

test.properties

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> 

出来上がり! Now execute

mvn clean package
4
Sudhakar

Maven-war-pluginのfilteringDeploymentDescriptorsオプションを使用してデプロイメント記述子をフィルタリングできると思います-

<properties>
    <maven.war.filteringDeploymentDescriptors>true</maven.war.filteringDeploymentDescriptors>
</properties>
3
Pravin Kalekar

Web.xmlでのmavenパラメーターのコーディングは直接実行できません。実行時に、アプリケーションが起動すると、mavenは作業を終了し、アプリケーションはmavenに関する知識を持たないためです。

代替web.xmlをフィルター処理できます(mavenフィルター処理を参照してください: http://maven.Apache.org/plugins/maven-resources-plugin/examples/filter.html )。 war(warプラグインのドキュメントのwebXmlパラメーターを参照してください: http://maven.Apache.org/plugins/maven-war-plugin/war-mojo.html

1
Assen Kolov

maven-war-pluginを追加し、<filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>を設定して、mvn packageの実行時にプレースホルダーを置き換えます

<properties>
  <project.build.directory>your path</project.build.directory>
</properties>

<build>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.2</version>
    <configuration>
      <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
    </configuration>
  </plugin>
</build>
0
xxg