3

jar ファイルの外部にある構成ファイルを読み取ることができる jar を作成しようとしています。できれば、jar ファイルが置かれているディレクトリから。私のディレクトリ構造は次のとおりです。

/src/main/resources/config

mvn install を実行してjarファイルを作成するmavenプロジェクトがあります。

<plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.expedia.e3.qm.perforce.audit.Main</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>config/config.xml</Class-Path>
                    </manifestEntries>
                </archive>
                <excludes>
                    <exclude>**/config/</exclude>
                </excludes>
            </configuration>
        </plugin>

現在、構成フォルダーを /target/classes/config から /target/config に手動で移動しています。Maven アセンブリ プラグインを調査しましたが、さまざまな構成をすべて試しましたが、/ のみに出力することができませんでした。 target/config は常に /target/audit-1.0/config を出力します。ここで、audit-1.0 は私の Maven プロジェクト名です。

Intellij IDEA を使用してプログラムをデバッグし、maven プロジェクトをビルド/インストールしています。

コードでは、ファイルにアクセスしようとしています

InputStream stream = Class.class.getResourceAsStream("/config/config.xml");

IDEで実行すると機能しますが、コマンドラインから実行すると次のようになります。

java -jar ./audit-1.0.jar

「inputStream」にアクセスしようとすると、エラーがスローされます。

Exception in thread "main" java.lang.NullPointerException

「/config/config.xml」が「/target/audit-1.0.jar!/config/config.xml」を指す必要があることを理解しています。ただし、「/target/config/config.xml」を指すようにしたい

何か案は?これは可能ですか?

4

1 に答える 1

3
File base = new File(<Current class name here>.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile();
File configFile= new File(base,"config.xml");
于 2013-03-22T10:15:13.873 に答える