4

maven-war-plugin がファイルを使用して戦争を構築する直前に、ファイルの内容を置き換えるにはどうすればよいですか?

ポイントは:

  • Eclipse内で開始されたTomcatとmvn tomcat:runでは、開発構成を使用したいと考えています。クラスパス上にある必要があります(たとえば、リソースフォルダー内)。そのため、ファイルはテストまでのすべての段階で存在する必要がありますが、パッケージ段階では存在しません
  • Bamboo、uat、prod サーバーでは、この構成を削除したいと考えています。クラスパスから提供されます
  • しかし、私はファイルを削除したくありません。共有サーバーを使用しているため、誰でもクラスパスに同じ名前のファイルを配置できます(偶然、たとえばapplication.properties)。だから私はこのファイルを戦争の中に置きたいのですが(春は戦争の外でそれを探しません)、それは空でなければなりません。
  • すべての環境で同じパッケージを動作させたいので、プロファイルを使用したくない

問題は、戦争の構築中 (またはその直前) にファイルの内容を置き換えるにはどうすればよいかということです。

4

4 に答える 4

3

ここでは、完全に異なる回答を提供します。これにより、独自の構成を持つ 2 つの異なるファイルを作成し、それらを 1 つのファイルにフィルター処理することができます。

.
├── pom.xml
└── src
    └──メイン
        ├──ジャワ
        ├──ウェブアプリ
        | | └──WEB-INF
        | | └──web.xml
        ├──フィルター
        | | ├── dev.properties
        | | └──prod.properties
        └──資源
            ├── application.properties
            └── その他のプロパティ

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stackoverflow</groupId>
    <artifactId>Q13045684</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <id>dev-resources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                    <includes>
                                        <include>application.properties</include>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                            <filters>
                                <filter>src/main/filters/dev.properties</filter>
                            </filters>
                        </configuration>
                    </execution>
                    <execution>
                        <id>prod-resources</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <overwrite>true</overwrite>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                    <includes>
                                        <include>application.properties</include>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                            <filters>
                                <filter>src/main/filters/prod.properties</filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

src/main/filters/dev.properties

someProperty = foo
someOtherProperty = bar

src/main/filters/prod.properties

someProperty =
someOtherProperty =

src/main/resources/application.properties

someProperty = ${someProperty}
someOtherProperty = ${someOtherProperty}

これにより、作業する 3 つのファイルが得られます。出力にはapplication.properties.

于 2012-10-24T14:18:09.297 に答える
1

これを行うには、 で少し詳しく説明しmaven-resources-pluginます。

まず、特別なファイルをsrc/main/resourcesフォルダー内の 1 つのディレクトリに配置する必要があります。

次に、フォルダー内の別のフォルダーの下に空のファイルを配置しsrc/main/resourcesます。

これはほんの一例です:

.
├── pom.xml
└── src
    └──メイン
        ├──ジャワ
        ├──ウェブアプリ
        | | └──WEB-INF
        | | └──web.xml
        └──資源
            ├──製品
            | | └── application.properties
            └──開発
                └── application.properties

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stackoverflow</groupId>
    <artifactId>Q13045684</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <id>dev-resources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources/dev</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>prod-resources</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <overwrite>true</overwrite>
                            <resources>
                                <resource>
                                    <directory>src/main/resources/prod</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>dev/**</exclude>
                    <exclude>prod/**</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
</project>

この構成では、target/classes使用する目的に応じて、フォルダーに異なるファイルを取得します。

mvn test

src/main/resources/dev/application.propertiesにファイルを入れますtarget/classes

mvn package

src/main/resources/prod/application.propertiesにファイルを入れますtarget/classes

下にあるその他のリソースsrc/main/resourcesは、通常どおりコピーおよび/またはフィルタリングされます。

于 2012-10-24T10:35:11.470 に答える
0

ファイルの内容を簡単に変更できるmaven replacerプラグインを見つけました

于 2013-01-28T15:20:57.800 に答える
0

を試す

https://maven.apache.org/plugins/maven-assembly-plugin/

しかし、それはアンチパターンです。AppServer の context-params と jndi-resources を使用することをお勧めします。

于 2012-10-24T08:49:10.857 に答える