[英]Reading a file from a jar, or anywhere on the classpath?
我正在嘗試構建一個將資源文件構建到jar中的應用程序,但我希望項目可以在eclipse中運行。 我的項目有一個基本的maven 2結構,我不確定如何讀取文件,以便在從JAR運行或從eclipse運行時找到並使用它。 思想?
結構體:
src/main/java
src/main/resources/file.txt
目前的閱讀方法:
getClass().getResourceAsStream("/file.txt")
是否有讀取方法將獲取src / main / resources / *,以及JAR的根級別(部署資源的位置)?
我不明白你的問題。 來自src/main/resources
會自動復制到target/classes
,因此可以在Maven和Eclipse下的類路徑上相對於同一位置的根級別提供(除非您的Eclipse項目未正確配置)。
當在JAR中打包時, target/classes
的內容將“按原樣”打包,因此不會更改任何內容。
換句話說,像這樣訪問你的file.txt
是完全沒問題的(這實際上是記錄的內容 ):
// Retrieve resource
InputStream is = getClass().getResourceAsStream( "/file.txt" );
// Do something with the resource
...
如果您在某處遇到問題,請澄清。
更新:我使用maven-eclipse-plugin進行了快速測試,我無法重現您的問題:
$ 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
元素)嗎?
使用maven2放在src / main / resources中的任何內容都將放在jar的根級別。 因此,您當前使用的方法將滿足這兩個條件。 從Maven頁面: http : //maven.apache.org/guides/getting-started/index.html#How_do_I_add_resources_to_my_JAR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.