Могу ли я добавить каталог, содержащий jar и зависимые jar-файлы, в качестве зависимости maven? - PullRequest
2 голосов
/ 18 февраля 2020

Я работаю над небольшой базой кода (проект maven), для которой требуются библиотеки, предоставляемые создателем системы, с которой интегрируется мой проект. Теперь библиотека имеет следующую форму:

com.example.library.client_1.2.3.v20190123/ (just a directory)
├── lib/
│   ├── some-dependency-3.2.1.jar
│   ├── ....jar
│   └── another-dependency-1.2.3.jar
├── META-INF/
│   └── MANIFEST.MF
└── some.library.jar

Как была построена эта библиотека?
Как я могу добавить "правильную" зависимость к такому пакету, используя maven, чтобы впоследствии я мог собрать большой / убер банку? Я знаю, что с одним jar есть несколько способов, например, я могу установить его в свой локальный репозиторий, используя mvn install:install-file .... Но как добавить указанную выше структуру в качестве зависимости, чтобы также включить библиотеки внутри каталога lib (транзитивные зависимости)? Могу ли я упаковать вышеупомянутую структуру для лучшего использования?

Нужно ли мне отдельно добавлять все эти lib банки в мой локальный репозиторий maven?

Если интересно, манифест имеет следующую форму :

Manifest-Version: 1.0
Bundle-SymbolicName: com.example.library....;singleton:=true
Export-Package: com.example.library...
Bundle-Name: ...
Bundle-Version: 1.2.3.v20190123
Bundle-ClassPath: lib/some-dependency-3.2.1.jar,lib/...
.jar,lib/another-dependency-1.2.3.jar
Bundle-ManifestVersion: 2
Bundle-ActivationPolicy: lazy
Bundle-Vendor: ...

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Манифест сообщает вам, что в банке этой библиотеки содержатся зависимости. Если вы устанавливаете эту библиотеку jar в OSGi, она должна работать, поскольку в нее встроены все зависимости.

Если вы планируете использовать эту библиотеку вне OSGi, тогда этот вид упаковки со встроенными библиотеками не имеет смысла. Может быть, они также предлагают только библиотеку, и вы можете установить зависимости через maven (если они являются хорошо известными библиотеками с открытым исходным кодом).

0 голосов
/ 21 февраля 2020

Установите все зависимости, упомянутые в файле манифеста, которые можно получить непосредственно из репозиториев publi c maven, как указано @Christian Schneider. Те, которые недоступны, могут быть установлены вручную в локальный репозиторий maven проекта в области проекта. Для этого определите репозиторий maven в проекте в своем родительском pom.xml файле:

<repositories>
    <repository>
        <id>in-project</id>
        <name>In Project Repo</name>
        <url>file://${project.basedir}/lib</url>
    </repository>
</repositories>

Затем установите библиотеку some.library.jar и перечисленные в манифесте зависимости, которые не доступны в -project репозиторий:

mvn install:install-file \
    -Dfile=path/to/some-library-1.2.3.jar \
    -DgroupId=com.example \
    -DartifactId=some-library \
    -Dversion=1.2.3 \
    -Dpackaging=jar \
    -DlocalRepositoryPath=lib \
    -DcreateChecksum=true

Затем будет сгенерирована структура в вашем локальном репозитории Maven (lib), а также сгенерированы контрольные суммы для Maven.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...