У меня есть два проекта:Groovy: Classpath ресурсов Загрузка не работает Ресурсы Внутри Dependency Фляг
- Main: M
- Зависимость: D
Project D имеет подкаталог 'XSD' где он имеет несколько файлов XSD, которые он использует для проверки.
Это кусок кода в проекте D, который извлекает эти XSD файлы:
private List<StreamSource> retrieveSchemaDefinitionsFromClasspath(String classpathXsdDir, String schemaDefinitionFilePattern) {
ClasspathResourceManager resourceManager = new ClasspathResourceManager()
List<String> schemaDefinitionFileNames = resourceManager.getReader(classpathXsdDir).text.split()
schemaDefinitionFileNames.findAll { it ==~ schemaDefinitionFilePattern }.collect {
new StreamSource(resourceManager.getReader("$classpathXsdDir/$it"))
}
}
Теперь этот кусок кода работает хорошо, когда я запускаю тестов.
Однако, когда я использую проект D как зависимость внутри проекта М, я получаю NullPointerException на этой линии вышеуказанного способа:
List<String> schemaDefinitionFileNames = resourceManager.getReader(classpathXsdDir).text.split()
Я смотрел на этот ответ: Load jar file contained within another jar file not working, который указывает на JarClassLoader turorial: http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html
Однако, из того, что я мог собрать из учебника JarClassLoader, похоже, что мне нужно указать имя банки.
Но я хочу, чтобы иметь возможность без проблем использовать барабан зависимости, созданный проектом D, в любом проекте, не беспокоясь о том, какой проект/jar D выполняет загрузку его ресурсов.
Итак, что является лучшим способом подойти к этой проблеме?
Спасибо!
Что вы используете для управления зависимостями? Например, есть простые способы сделать это с Maven. – danehammer
@ danehammer Я использую gradle для управления зависимостями. Итак, артефакт jar, созданный проектом D, установлен в моем репозитории maven, и он объявляется как зависимость внутри проекта M build.gradle. –