2010-03-18 115 views
5

我正在嘗試構建一個將資源文件構建到jar中的應用程序,但我希望在eclipse中運行該項目。我的項目有一個基本的maven 2結構,我不確定如何讀取文件,以便在從JAR或eclipse中運行時找到並使用它。思想?從jar或類路徑中的任何位置讀取文件?

結構:

src/main/java 
src/main/resources/file.txt 

當前讀數方法:

getClass().getResourceAsStream("/file.txt") 

是否有讀書方法,將拿起的src /主/資源/ *,以及根JAR的水平(在哪裏部署資源)?

回答

8

我不明白你的問題。 src/main/resources的資源會自動複製到target/classes,因此可以在Maven和Eclipse下相對於相同位置的根級別(除非您的Eclipse項目未正確配置)的類路徑中使用。

而當打包在JAR中時,target/classes的內容按「原樣」打包,因此沒有任何更改。

換句話說,訪問您file.txt這樣是完全沒有問題(這實際上是how things are documented):

// Retrieve resource 
InputStream is = getClass().getResourceAsStream("/file.txt"); 

// Do something with the resource 

... 

如果你有什麼地方出了問題,請澄清。

更新:我做了一個快速測試與Maven的Eclipse的插件,我無法重現你的問題:

$ mvn archetype:generate -DgroupId=com.stackoverflow -DartifactId=q2467362 -Dversion=1.0-SNAPSHOT 
... 
$ cd q2467362 
$ mkdir -p src/main/resources 
$ mvn eclipse:eclipse 
... 
$ cat .classpath 
<classpath> 
    <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/> 
    <classpathentry kind="src" path="src/main/java" including="**/*.java"/> 
    <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/> 
    <classpathentry kind="output" path="target/classes"/> 
    <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
</classpath> 

目錄src/main/resources添加源文件夾中的預期。你能否顯示你的POM(尤其是resources元素,如果你定義的話)?

+0

在自動構建步驟期間,eclipse項目必須將資源複製到目標/類上才能做什麼? – 2010-03-18 14:06:50

+0

@Stefan設置'src/main/resource'作爲源文件夾。但是這應該由maven-eclipse-plugin或者M2Eclipse完成。 – 2010-03-18 14:35:32

+0

我嘗試用mvn eclipse重新生成該項目:eclipse,但它仍然沒有采用。嗯。我想我只會以這種方式手動添加它,然後。 – 2010-03-18 14:54:46