2017-01-19 1 views
0

私はMavenプロジェクトの依存関係として小さなプログラムを使いたいです。このプログラムは、実行前に編集できるプロパティファイルによって構成されています。これまでは、JARとしての依存関係をローカルリポジトリに追加しました。JAR依存関係からプロパティファイルを抽出し、それを自分のクラスパスで使用します。

今、私はその依存関係の性質はmyprogram/local-repository/com/example/mydependency/mydependency.jar/mydependency.propertiesですなわちmyprogram/src/main/resources/config/myprogram.propertiesで、私自身の優れたクラスパスにアクセスすることはできませんファイルを作りたいです。

私は、プロパティファイルのパスが定義されているコードの一部を変更しようとしました:

public example() { 

    Properties prop = new Properties(); 
    InputStream input = example.class.getResourceAsStream("/config/myprogram.properties"); 
    prop.load(input); 

    ... 

} 

私はまた私のローカルリポジトリに追加する前に、依存関係の元のプロパティファイルを削除しました。

プログラム全体が動作していますが、期待通りに動作していません。奇妙なことに、/src/main/resources/configの新しいプロパティファイルも、mydependency.jarの古いプロパティファイルも使用されません。いくつかの種類のデフォルトプロパティファイルが、私の最後の太っているJARに入れられているようです。しかし、どこでもそのソースを見つけることはできません - たとえそれをデバッグしようとしても。そのデフォルトのプロパティーファイルは、どこにも表示されないようです。

ここで、依存関係のプロパティファイルを自分のクラスパスに適切に移動するにはどうすればよいですか?

このデフォルトプロパティファイルはどこから表示できますか?

これはMavenまたはソースコード自体に問題がありますか?

ありがとうございます!

+0

これは非常に奇妙なものです:あなたのローカルMavenリポジトリは 'myprogram/local-repository'にありますか? – JimHawkins

+0

* Mavenやソースコード自体に問題がありますか?*私の見解:あなたのコンセプトの問題です。プロパティファイルを作成してクラスパスに入れるのは、時間がかかる作業ではありません...依存関係のファイルとは異なる名前のファイルを作成し、アプリケーションのクラスパスに配置します(arc/main /リソース) – JimHawkins

+0

@JimHawkinsはい、私のローカルMavenリポジトリは '' myprogram/local-repository''にあります。つまり、新しいプロパティファイルを作成して依存ファイルを上書きする必要がありますか?これをどのように達成できますか、または、特定のファイルをそれぞれ上書きすることをプログラムがどのように知っていますか? – phly

答えて

0

あなたはこのような何かを行うことができます。その後、

public static String getValueFromDependencyProps(ClassLoader cl, String propertiesFile, String key) throws IOException { 
    Properties prop = new Properties(); 
    prop.load(cl.getResourceAsStream(propertiesFile)); 
    String value = prop.getProperty(key); 

    if (value == null) 
     throw new NullPointerException(); 
    else 
     return value; 
} 

とを:

String value = getValueFromDependencyProps(YourDependencyClass.class.getClassLoader(), "your.properties", key); 

をテストし、取り組んでいます。これを使用して、外部のMaven依存関係から任意のプロパティファイルにアクセスすることができます(そのクラスの1つを使用して、YourDependencyClass)。

関連する問題