Доступ к JAR-контенту зависимостей на Classpath - PullRequest
0 голосов
/ 03 февраля 2020

Я потратил, возможно, неделю на эту конкретную задачу c, и это сводит меня с ума, потому что это действительно не должно быть так сложно. Я уверен, что этот пост является дубликатом, на самом деле я не буду утверждать, что он уникален, но я прочитал, возможно, 50 подобных случаев StackOverflow без особой удачи, так что, может быть, я просто такой бестолковый? Докажи, что я прав. Я (я sh) новичок в Java, поэтому я все еще оборачиваю мозги такими терминами, как classpath, загрузчик классов и т. Д. c. Пожалуйста, исправьте меня, если моя терминология неверна.

Мои цели:

  1. Добавить файл в JAR. Готово.
  2. Доступ к этому файлу через путь к классам в отдельном проекте 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
...