0

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

開発時には、これらのファイルを の下に置きsrc/main/resources、 からアクセスしgetClass().getResourceAsStream("/config-file-name")ます。これはうまく機能します。

すべての依存関係を含む jar をビルドするために、maven-assembly-plugin を選択します。

    <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にラップされていますが、それらを分離したいと考えています。

したがって、次の構成を追加します。

    <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/か?

誰かが知っているなら、助けてください。

ありがとう。


更新:最後に、maven リソース ファイルの使用を断念しました。代わりに、ファイル パスをデフォルトで jar と同じパスに設定しました。Eclipse が文句を言う以外はすべて正常に動作します。

構成ファイルをjarから移動したいので、それをtarget/classesフォルダーに置きたくないので<targetPath>..</targetPath>、構成ファイルをjarファイルと同じディレクトリに移動するために使用します。

Eclipse プロジェクト設定を再生成すると、Eclipse は次のように言います: 出力フォルダー "project/target" 内に出力フォルダー "project/target/test-classes" をネストできません。

誰か助けて?

4

3 に答える 3

0

クラスパスに存在しないため、アプリケーションは構成ファイルにアクセスできません。

構成ファイルをアプリケーションの残りの部分から分離したい場合は、アセンブリ形式を再検討することをお勧めします。jar-with-dependencies の代わりに bin を使用することもできますが、配布と使用に関する課題があります。

于 2012-03-08T07:29:57.393 に答える
0

私は最終的にmavenリソースファイルの使用をあきらめ、ファイルパスをデフォルトでjarと同じパスに設定しました。Eclipseが文句を言う以外はすべてうまくいきます。

(構成ファイルをjarから移動したいので、target/classesフォルダーに置きたくないので、..を使用して構成ファイルをjarファイルと同じディレクトリに移動します。再生成するとeclipse プロジェクト設定、Eclipse によると: 出力フォルダー "project/target" 内に出力フォルダー "project/target/test-classes" をネストすることはできません。)

今まで解決策が見つかりませんでした。日食のバグのようです。

今、私は Eclipse をあきらめ、IntelliJ IDEA に変更しました。これは非常に優れた IDE であり、特に Maven と完全に統合されています。MavenプロジェクトでEclipseを使用する機会は避けます。

于 2012-03-15T14:22:37.833 に答える
0

プロパティ ファイルの複雑さに応じて、リソース プラグイン フィルタ機能を使用して、maven プロファイルに基づいて値を変更できます。たとえば、location という名前のプロパティが必要な場合は、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>

ビルド時に、ターゲット ディレクトリを調べてそのプロパティ ファイルを表示すると、正しい値が代入されていることがわかります。

于 2012-03-08T13:16:33.427 に答える