Как включить файл зависимостей, помещенный в target, в код Java с помощью Maven? - PullRequest
0 голосов
/ 12 апреля 2019

Я немного застрял, потому что не уверен, что иду по правильному пути.

В настоящее время у меня есть несколько проектов - один проект, который распространяет файл .zip, содержащий несколько других файлов, включая файл XML и файл JSON. Это уже находится в локальном репозитории Maven, который мы используем, и на данный момент не является проблемой.

Проблема в том, что теперь у нас есть другой проект, который должен использовать этот файл, как во время компиляции, так и во время выполнения. Итак, нам нужно загрузить это как ресурс. Тем не менее, включая эти файлы в банку с помощью:

                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-scripts</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target</outputDirectory>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>mygroupidhere</groupId>
                                    <artifactId>myartifacthere</artifactId>
                                    <version>myversionhere</version>
                                    <overWrite>true</overWrite>
                                    <classifier>sources</classifier>
                                    <type>zip</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

извлекает необходимые файлы для target / sources и включает их в каталог верхнего уровня встроенного jar-файла. Однако я изо всех сил пытаюсь на самом деле загрузить эти файлы , используя код Java в проекте, в котором он находится. Это должно быть совместимо как со сборкой (с юнит-тестами), так и во время выполнения из файла jar ( в банке файлы помещаются в источники / как и следовало ожидать).

Я пытался использовать Files.newInputStream(Paths.get("sources/examplefile")), но модульные тесты не пройдены (на данный момент он находится в target / sources / examplefile, который работает, но, очевидно, не будет работать во время выполнения, потому что он будет находиться только в sources / examplefile). ).

Я также попробовал getResourcesAsStream из класса, что имеет смысл во время выполнения, но не будет работать в модульных тестах, потому что оно будет в target, как это взято из зависимости. Модульные тесты должны быть совместимы с файлами в зависимости напрямую (поэтому они больше похожи на интеграционные тесты), в противном случае мы хотим, чтобы этот проект не удалось построить.

Кто-нибудь знает ответ?

1 Ответ

0 голосов
/ 12 апреля 2019

Это звучит как плохой дизайн.

  1. Создайте артефакт maven (файл jar) с вашими ресурсами, а затем добавьте его в качестве зависимости к вашему проекту.Также есть простой файл класса (например, Loader).
package something;
public class Loader(){
}
Используйте этот класс в качестве отправной точки для загрузки ваших ресурсов: something.Loader.class.getClassLoader().getResourceAsStream("/<whatever>")
...