簡體   English   中英

從jar或類路徑的任何地方讀取文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM