0

私はMavenを初めて使用し、2つのjarを生成するようにMavenを構成しようとしています.1つは開発用で、もう1つは本番用です。それらの唯一の違いは、データベース接続が異なる config.properties ファイルであるため、Maven プロファイルを使用できると考えました。

驚いたことに、両方のファイルを一度に生成することはできません。プロファイルを使用する場合、ビルドするたびにプロファイルを選択する必要があり、プロファイルを使用して jar (私の場合) が作成されます。問題は、分類子のないものと分類子のあるもの ( myjar.jar や myjar-prod.jar など) の 2 つの正確に等しい jar を作成するため、dev と prod jar を生成する場合は、4 を作成する必要があります。 jars (最初に 1 つのプロファイルで Maven を実行し、その後別のプロファイルで実行)

どうしてこれなの? 私には意味がありません...しかし、わかりました...

私の質問は:

2 つの jar が生成されないようにする方法はありますか? つまり、私は異なるプロファイルを持ちたいのですが、ビルドプロセスを複数回 (各プロファイルに 1 つ) 実行することを (悲しみながら) 受け入れました

これは私の 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.p2p.</groupId>
    <artifactId>LoadACHFiles</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>MyProject</name>
    <url>http://maven.apache.org</url>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>          
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>        
            </plugin>           
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>config-*.properties</exclude>          
                </excludes>
            </resource>      
        </resources>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.jasypt</groupId>
            <artifactId>jasypt</artifactId>
            <version>1.9.0</version>
            <type>jar</type>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>prod</id>
             <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>test</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>                                    
                                    <tasks>
                                        <!--<delete file="${project.build.outputDirectory}/config.properties"/>-->
                                        <copy file="src/main/resources/config-prod.properties"
                                              tofile="${project.build.outputDirectory}/config.properties"/>
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.13</version>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.4</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <classifier>prod</classifier>
                                    <source>1.6</source>
                                    <target>1.6</target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>        
    </profiles>
</project>
4

2 に答える 2

1

jar を分類しても問題ない場合は、プロファイルを使用せずにやりたいことを実行できるため、単一のビルド コマンドですべての環境の jar を作成できます。重要なのは、 Maven フィルタリングがどのように機能するかを理解することです。

これは、私が同様の質問に提供した回答を拡張したものです。その設定から始めます。それで:

アプリに必要なプロパティを含むで作成config.propertiesします。src/main/resources

my.database.url=${database.url}
my.database.user=${database.user}
my.database.pw=${database.pw}

次に、環境ごとに適切な値を作成prod.propertiesdev.propertiesて保持します。${basedir}/src/main/filters

database.url=URL-for-dev
database.user=user-for-dev
database.pw=pw-for-dev

を実行するmvn clean packageと、Maven は/src/main/resourcesを含むの内容をコピーconfig.propertiesし、コピー中にプロパティの置換を行います。リソースと jar プラグインの両方が複数回実行されるため、Maven は個別に分類された jar ファイルを作成します。それぞれにconfig.properties、環境の正しいプロパティを保持するファイルが含まれます。フィルターはビルドされた jar にはなりません。

于 2013-03-08T21:59:17.270 に答える
0

プロファイルセクションのmaven jarプラグインを削除して作成しました。これを変更しました:

<profile>
        <id>prod</id>
         <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>test</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>                                    
                                <tasks>
                                    <!--<delete file="${project.build.outputDirectory}/config.properties"/>-->
                                    <copy file="src/main/resources/config-prod.properties"
                                          tofile="${project.build.outputDirectory}/config.properties"/>
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.13</version>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classifier>prod</classifier>
                                <source>1.6</source>
                                <target>1.6</target>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile> 

このため:

<profile>
        <id>prod</id>
         <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>test</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>                                    
                                <tasks>
                                    <!--<delete file="${project.build.outputDirectory}/config.properties"/>-->
                                    <copy file="src/main/resources/config-prod.properties"
                                          tofile="${project.build.outputDirectory}/config.properties"/>
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.13</version>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>               
            </plugins>
        </build>
    </profile> 
于 2013-03-08T19:43:20.183 に答える