次のようなプロジェクト構造を持つ Java アプリケーションがあります。
myProject
|
|----src
| |
| |--main
| |
| |--resources
| |
| |--userConfig.properties
| |--log4j.properties
|
|---target
Maven
プロジェクトのビルドに使用しています。maven
次のコマンドを使用して jar ファイルをビルドします。
mvn package -DMaven.test.skip=true
userConfig.properties
JAR ファイルからファイルを除外したいので、pom.xml
次のように更新しました。
<excludes>
<exclude>**/userConfig.properties</exclude>
</excludes>
しかし、コンパイルされたコードが存在するターゲット フォルダーからは除外されます。ファイルが見つからないため、アプリケーションは実行されませんuserConfig.properties
。
誰か助けてくれませんか?
ベストアンサー1
私もこのシナリオに遭遇しました。基本的には、Eclipseからローカルでコードを実行できるようにしたいのですが、ユーザー設定プロパティ内部など、簡単にアクセスできるファイル/src/main/resources
。さらに、コンパイルされた実行可能JARを外部に提供したい場合、ユーザー設定プロパティこれにより、ユーザーは JAR をクラックせずにアプリケーションを構成できるようになります。
私の実装は次のとおりです。実行すると次のようにmvn clean install
なります。
- 指定された実行可能なJARファイルを作成する
mainClass
- JARからすべての
.properties
ファイルを除外するsrc/main/resources
- プロジェクトの依存関係を
lib
プロジェクトルートのフォルダにコピーします。 .properties
にあるすべてのファイルをプロジェクト ルートのフォルダーsrc/main/resources
にコピーしますconf
。この手順は、JAR のユーザーにとって便利なオプションであることに注意してください。このファイルをディレクトリに明示的に作成するように要求できますconf
。このconf
ディレクトリは、マニフェストを介してランタイム クラスパスに効果的に追加されます。- この
conf
フォルダをマニフェストに追加し、実行可能なJARからアクセスできるようにします。
これらの Maven プラグインを POM 構成で相互に組み合わせて使用すると、必要なものが得られます。このソリューションの「ベスト プラクティス」については、よくわかりません。
使用Maven 依存関係プラグイン次のように:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
使用Maven-jarプラグイン次のように:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3</version>
<configuration>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>package.path.to.your.main.class.MainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
使用Maven リソース プラグイン次のように:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
このプロジェクト設定を使用すると、1 つの構成を使用して Eclipse で実行し、プロパティが相互に影響することなく、ユーザーに構成するプロパティ ファイルを提供できます。