質問

私はいくつかの構成ファイルに依存するコマンドラインツールを構築しています。

開発時に、それらのファイルを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>
.

ターゲットディレクトリを見ると、そのプロパティファイルを表示する場合は、正しい値が置き換えられた値を表示する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top