Как сделать так, чтобы проект Java использовал пользовательскую библиотеку, сохраняя доступ к исходному коду без ручного создания библиотеки JAR? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть несколько Java gradle проектов, которые должны интерпретировать одни и те же данные, поэтому я хотел бы создать библиотеку для совместного использования между проектами.

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

Чтобы было ясно, я хотел бы включить мою библиотеку Java как Субмодулируйте и редактируйте мой build.gradle файл, чтобы при сборке проекта он собирал и «связывал» библиотеку, но я хочу сохранить возможность доступа и изменения источника библиотеки. Я не хочу открыть другой проект, скомпилировать JAR и копировать его в каталог зависимостей каждый раз, когда я изменяю библиотеку. Я также хочу «статически» связать библиотеку, чтобы можно было развернуть только один JAR.

В Java это, похоже, не работает хорошо. Я попытался просто включить исходный код, но у меня возникли проблемы с именем пакета. Если у меня есть моя библиотека как com.acme.lib, я не могу включить ее в com.acme.proj1, так как каталоги уже существуют.

Для более подробной информации, моя библиотека выглядит так:

src
└── main
    └── java
        └── com
            └── acme
                └── Library.java

и мои проекты размечены так

src
└── main
    └── java
        └── com
            └── acme
                └── Project1.java

Учитывая, что большая часть структуры пакета одинакова, я не могу собрать оба, я получаю ошибки имени пакета от одного или другого.

Я не нашел другого способа сделать это в своем исследовании. Это возможно? Или мне следует поступить по-другому и использовать Java соглашение, о котором я не знаю?

Я использую IntelliJ IDEA, если это имеет значение.

...