Я потратил, возможно, неделю на эту конкретную задачу c, и это сводит меня с ума, потому что это действительно не должно быть так сложно. Я уверен, что этот пост является дубликатом, на самом деле я не буду утверждать, что он уникален, но я прочитал, возможно, 50 подобных случаев StackOverflow без особой удачи, так что, может быть, я просто такой бестолковый? Докажи, что я прав. Я (я sh) новичок в Java, поэтому я все еще оборачиваю мозги такими терминами, как classpath, загрузчик классов и т. Д. c. Пожалуйста, исправьте меня, если моя терминология неверна.
Мои цели:
- Добавить файл в JAR. Готово.
- Доступ к этому файлу через путь к классам в отдельном проекте Eclipse с использованием этого jar в качестве зависимости.
Я уже подтвердил, что файл был добавлен к банке.
jar tf MyJarFile.jar
A/ // src/main/java
A/A.class // src/main/java
B/ // src/main/java
B/B.class // src/main/java
B/B2.class // src/main/java
C.properties // src/main/resources
NeededFile.xsd // xsdDir/ (same dir as src)
Теперь у меня 0 проблем с доступом к другим файлам в этой банке. Я запустил основную сборку и обновил сборку. xml. Я подозреваю, что, хотя я добавил его в JAR, который импортируется как зависимость от пути к классам этого другого проекта, сам файл в JAR не доступен для пути к классам. Возможно, это как-то связано с тем, что этот файл не используется ни в каком скомпилированном коде ...?
Что касается этого другого проекта, то NeededFile.xsd просто не существует.
getClass().getClassLoader().getResourceAsStream("/NeededFile.xsd"); // Null
getClass().getClassLoader().getResourceAsStream("NeededFile.xsd"); // Null
getClass().getClassLoader().getResource("NeededFile.xsd").getPath(); // Null
A.class.getClassLoader().getResourceAsStream("NeededFile.xsd"); // Null
getClass().getClassLoader().getResource("A/A.class").getPath(); // Found
getClass().getClassLoader().getResourceAsStream("C.properties"); // Found
A.class.getClassLoader().getResourceAsStream("A/A.class"); // Found