Я пытаюсь создать приложение, которое встраивает файл ресурсов в банку, но я хотел бы иметь проект, выполнимый в затмении. У меня есть основной знаток 2 структуры для моего проекта, и я не уверен, как читать в файле, таким образом, что это находится и используется, когда выполнено от JAR или из затмения. Мысль?
Структура:
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
, если вы его определите)?
Все, что помещается в src / main / resources с использованием maven2, будет помещено на корневой уровень jar. Таким образом, метод, который вы сейчас используете, будет удовлетворять обоим условиям. Со страницы Maven: http://maven.apache.org/guides/getting-started/index.html# How_do_I_add_resources_to_my_JAR