マルチ環境のjarを構築するために、Mavenでプロファイルを使用し始めています。
これを行うには、公式ドキュメントに従いました。
まず、検証の質問:
Mavenプロジェクトによって常に 1 つのパッケージを生成する必要があることを読みましたが、複数環境の jar のみを生成したい (つまり、各 jar のプロパティ ファイルのみを変更する)。これを行うために複数のプロジェクトを生成する必要はないと思いますよね?
今説明:
ファイルを読み取り、特定の一連のレビューを適用してから、情報の一部をデータベースに挿入するアプリがあります。この検証が問題ないこと、および後でデータベースで失敗したかどうかに関係なく、正しい結果が得られることをテストしたいと思います。したがって、このアプリでは、動的に設定された DAO を使用します。これは: 私のアプリは実行時にconfig.propertiesファイルから DAO クラスを取得します。実際の DAO をシミュレートするいくつかのファサード DAO を作成しました (たとえば、データベース内のすべてのトランザクションが正常に行われたことをシミュレートする DAOApproveAll)。
単体テストでは、config.propertiesをロードして、クラスを保持するparam daoimplclassの値を変更します (後で変更を元に戻します)。例えば:
Properties prop = Configurator.getProperties("config");
final String DAODEFAULT = prop.getProperty("daoimplclass");
final static String DAOAPPROVEALL = "com.package.dao.DAOAllApproved";
public void testAllAproved() {
try {
Processor processor = Processor.getInstance();
prop.setProperty("daoimplclass", DAOAPPROVEALL);
...
}
finally{prop.setProperty("daoimplclass", DAODEFAULT);}
データベースで異なる結果が発生した場合に何が起こるかを検証するために、(さまざまな DAO ファサードを使用して) 多くのテストを行います。
ここで、config.propertiesをconfig-dev.propertiesとconfig-prod.propertiesの2 つのファイルに変更しました。そして、元のpom.xmlを次のようなプロファイルを使用するように変更しました。
<profiles>
<profile>
<id>dev</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-dev.properties"
tofile="${project.build.outputDirectory}/config.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>dev</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>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<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>
Netbeans で「クリーンとビルド」を行うと、 config.propertiesが見つからないため、テストの実行中にエラーが発生します。もちろん、3 番目のconfig.propertiesを作成します(他の 2 つは -dev と -prod を使用します)。これはコンパイルされますが、2 つの jar は生成されず、1 つだけ生成されます。
私の正式な質問:
- プロファイルの何が間違っていますか?
- テストが正常に実行され、開発用にのみ実行されるようにするにはどうすればよいですか?