60

こんにちは、Java アプリケーションで src/main/resources の構成ファイルを使用しています。私はこのように私のクラスでそれを読んでいます:

new BufferedReader(new FileReader(new File("src/main/resources/config.txt")));

だから今、私はこれをmavenを使って構築していmvn assembly:assemblyます。これが私の pom.xml のビットです:

<plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <finalName>TestSuite</finalName>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.some.package.Test</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

したがって、アプリを実行すると、次のエラーが発生します。

src\main\resources\config.txt (The system cannot find the path specified)

しかし、組み立てた瓶を右クリックすると、中にそれを見ることができます。誰かが私が間違っていることを知っていますか?

4

6 に答える 6

97

からのリソースsrc/main/resourcesはクラスパスのルートに配置されるため、次のようにリソースを取得する必要があります。

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/config.txt")));

config.txtアーカイブのルートにあるように、maven によって生成された JAR/WAR ファイルを調べることで確認できます。

于 2012-04-16T08:58:38.163 に答える
13

FileReader は、ファイル システム上のファイルから読み取ります。

おそらく、このようなものを使用してクラスパスからファイルをロードするつもりでした

// this will look in src/main/resources before building and myjar.jar! after building.
InputStream is = MyClass.class.getClassloader()
                     .getResourceAsStream("config.txt");

または、ファイルを読み取る前に jar からファイルを抽出することもできます。

于 2012-04-16T08:54:46.277 に答える
6

src / main / resourcesに配置したリソースは、ビルドプロセス中に、以下を使用してアクセスできるターゲット/クラスにコピーされます。

...this.getClass().getResourceAsStream("/config.txt");
于 2012-04-16T08:55:21.790 に答える
1

アセンブリプラグインはファイルをクラスパスに配置すると思います。JAR 内の場所は、ディスク上とは異なります。生成された JAR を解凍し、ファイルの場所を確認します。

于 2012-04-16T08:59:20.237 に答える