在使用maven构build之后,src / main / resources中的资源未find

你好,我正在使用我的Java应用程序中的src / main / resources的configuration文件。 我正在阅读我的class级,就像这样:

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

所以现在我使用mvn assembly:assembly来构build这个maven。 这是在我的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) 

但是当我右键点击我的组装jar我可以看到里面,任何人都知道我在做什么错了?

来自src/main/resources将被放到classpath的根目录下,所以你需要获取资源:

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

您可以通过查看由maven生成的JAR / WAR文件进行validation,因为您可以在归档的根目录中findconfig.txt文件。

FileReader从文件系统上的文件读取。

也许你打算使用这样的东西从类path加载文件

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

或者,您可以在阅读之前从jar中提取文件。

您在src / main / resources中放置的资源将在构build过程中被复制到可以使用以下目标访问的目标/类:

 ...this.getClass().getResourceAsStream("/config.txt"); 

我认为程序集插件将文件放在类path上。 在JAR中的位置将不同于在磁盘上看到的位置。 解压缩生成的JAR并查看文件位于的位置。