Mavenプロジェクトで設定ファイルの場所を選択することになっていますか
-
09-12-2019 - |
質問
私はいくつかの構成ファイルに依存するコマンドラインツールを構築しています。
開発時に、それらのファイルをsrc/main/resources
に入れ、getClass().getResourceAsStream("/config-file-name")
によってアクセスします。
Maven-Assembly-Pluginを選択して、すべての依存関係でJARを構築します。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.myproject.Scheduler</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
.
設定ファイルはすべてjarで包まれていますが、それらを分離したいです。
so、次の設定を追加します。
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>conf.properties</include>
</includes>
<filtering>true</filtering>
<excludes>
<exclude></exclude>
</excludes>
<targetPath>..</targetPath>
</resource>
</resources>
.
完了した後、設定ファイルはjarではなくjarと並んでいます。
しかし、私のコードは今ファイルにアクセスできない。
コード内のファイルへのアクセス方法を変更する必要がありますか?
または私はそれらのファイルをsrc/main/resources/
に入れない必要がある場合は、代替案?
誰かが知っているなら、助けてください。
ありがとう。
update:最後に、Mavenリソースファイルを使用してあきらめる代わりに、デフォルトでJARと同じパスにファイルパスを設定します。
設定ファイルをjarから移動し、それをターゲット/クラスフォルダに移動したくないので、configureファイルをJARファイルと同じディレクトリに移動します。
Eclipseプロジェクト設定を再生成すると、Eclipseは次のように述べていません。
誰かが私を助けますか?
解決 3
最後にMavenリソースファイルを使用して、デフォルトでjarと同じパスにファイルパスを設定します。
(コンフィグファイルをjarから移動したいので、ターゲット/クラスフォルダに移動したくないので、設定ファイルをJARファイルと同じディレクトリに移動します。いつEclipseプロジェクトの設定を再生成するEclipseは、次のように述べていません。
私は今まで解決策が見つかりませんでした、Eclipseのバグのようです。
今、私はEclipseをあきらめて、Intellijのアイデアに変更されました。MavenプロジェクトにEclipseを使用する機会を避けます。
他のヒント
アプリケーションは、クラスパスにはもうイングファイルにアクセスできません。
設定ファイルを残りのアプリケーションから区切りたい場合は、アセンブリ形式。依存関係と使用に関する課題に伴い、依存依存関係の代わりにBINを使用することをお勧めします。
プロパティファイルの複雑化に応じて、リソースプラグインフィルタ機能を使用してMavenプロファイルに基づいて値を変更できます。たとえば、場所という名前のプロパティを持つことができたら、DevとProductionプロファイルを定義してから、POM(またはMaven 2にいる場合はProfiles.xml)のMavenプロパティに値を設定することができます。
<properties>
<my.location>the_real_value</my.location>
</properties>
.
その後、これを実行するプロパティファイルにあります。
location=${my.location}
.
あなたがあなたのPOMでフィルタリングを設定してください。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
.
ターゲットディレクトリを見ると、そのプロパティファイルを表示する場合は、正しい値が置き換えられた値を表示する必要があります。