2012-03-08 2 views
0

いくつかの設定ファイルに依存するコマンドラインツールを構築しています。mavenプロジェクトでconfigファイルの場所を選択するにはどうすればいいですか

開発時には、これらのファイルを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/に入れないでください。

誰かが知っていれば、助けてください。

ありがとうございました。


更新:最後に、私の代わりに、私はデフォルトでjarファイルと同じパスにファイルパスを設定するEclipseは文句を除いて、すべてがうまく動作しますが、Mavenのリソースファイルを使用してあきらめます。

configファイルをjarファイルから移動したいので、target/classesフォルダに入れたくないので、<targetPath>..</targetPath>を使ってconfigureファイルをjarファイルと同じディレクトリに移動します。

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

誰か助けてください?

+0

クラスパスに設定ファイルの場所がありますか? 'getClass()。getResourceAsStream("/config-file-name ")'はクラスパスの場所を使ってリソースを検索します。 –

+0

はい、それは使用しますが、それはmavenプロジェクトのリソースファイルにアクセスする通常の方法です。私は私の設定ファイルをsrc/main/resourcesの代わりに他の場所に置くことができると思います。私は実行中のjarファイルと同じディレクトリを好むので、コード内でjarパスを実行する方法を探しています。 –

+0

'System.getProperty(" user.dir ")'はコード内のパスを返します。 [System.getProperties()](http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#getProperties%28%29)および[System.getProperty(String key)]を参照してください。 ](http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#getProperty%28java.lang.String%29)。 – FrVaBe

答えて

0

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

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

私は今まで解決策を見出していませんでしたバグ。

私はEclipseをあきらめ、IntelliJ IDEAに変更しました。これはかなり良いIDEです。特にMavenと完全に統合されています。私は、任意のメイプルプロジェクトにeclipseを使用するチャンスを避けるでしょう。

0

アプリケーションはクラスパスに含まれていないため、設定ファイルにアクセスできません。

設定ファイルをアプリケーションの他の部分から分離したい場合は、assembly formatを見直してください。 jar-with-dependenciesの代わりにbinを使用することもできますが、配布と使用に関する問題があります。

0

プロパティファイルの複雑さに応じて、リソースプラグインフィルタ機能を使用して、Mavenプロファイルに基づいて値を変更することができます。たとえば、locationという名前のプロパティを使用する場合は、devとproductionプロファイルを定義してから、pom(またはプロファイル)のmavenプロパティに値を設定します。XMLあなたはMavenの2にしている場合):

<properties> 
    <my.location>the_real_value</my.location> 
</properties> 

は、その後、あなたがこれを行うと思いプロパティファイルに:

location=${my.location} 

ちょうどあなたがそうのように、あなたのポンポンでのフィルタリングの設定を確認してください。

あなたがターゲットディレクトリに見れば、構築、およびそのプロパティファイルを表示すると
<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
</resources> 

、あなたはで置換正しい値が表示されるはずです。

+0

プロパティは複雑ですので、プロパティファイルを使用する必要がありますが、src/main/resourcesに置かなくても、ファイルパスでアクセスする必要はありません。 –

+0

あなたは物件内で何かを使うことができるはずです。だから、なぜ "複雑な"ファイルを移動させ、ファイルパスでアクセスするのかは分かりませんが、これは使い方が簡単ではありません。 – Michael

+0

時々変更されるかもしれない多くの設定があります。私はちょうど設定ファイルと実行中のjarファイルを分けて、pom.xmlに入れておきたいと思います。 –

関連する問題