Как добавить внешнюю библиотеку jar с Maven, с возможностью полной упаковки (с внешней банкой внутри)?

Я использую Maven и имею внешнюю библиотеку (сажу). Я хочу добавить эту библиотеку в свой проект с Maven, а затем упаковать в 1 uber jar.

1) Чтобы добавить библиотеку, я могу использовать локальное репо (пример).

2) Чтобы получить банку с зависимостями, я могу использовать шейдерный плагин или другой.

Но вместе это не работает, потому что на первом шаге у зависимости есть область действия, и эта зависимость не будет добавлена ​​в uber jar.

Я понимаю, что могу установить mvn, но это будет работать только на моей машине.

Возможно ли достичь моей первоначальной цели?


person watson94    schedule 30.04.2015    source источник
comment
какой размах?? пробовали ли вы maven.apache.org/guides/mini /guide-3rd-party-jars-local.html ?   -  person sodik    schedule 30.04.2015
comment
mvn install работает нормально, но мне нужно сделать это на каждом компьютере   -  person watson94    schedule 30.04.2015
comment
а какой прицел используете?? это должно работать нормально   -  person sodik    schedule 30.04.2015
comment
и, возможно, проверьте этот вопрос, если у вас есть похожие проблемы stackoverflow.com/questions/22015685/   -  person sodik    schedule 30.04.2015
comment
Оно работает. В этом решении я должен установить этот файл на каждый компьютер (где я буду запускать свою программу). Я хочу изменить что-то, что может находиться под vcs (pom.xml или другие файлы в моем проекте).   -  person watson94    schedule 30.04.2015
comment
но фиктивный вопрос: что не так с локальным репо в проекте (как в вашем примере)?   -  person sodik    schedule 30.04.2015
comment
Насколько я понимаю, зависимость от локального репозитория имеет область действия ‹system›. Я ошибся?   -  person watson94    schedule 30.04.2015
comment
вовсе нет, локальный репозиторий такой же, как и любой другой. системная область имеет совершенно другое назначение.   -  person sodik    schedule 30.04.2015


Ответы (1)


Возможно, самым простым решением для вас было бы использовать ваш локальный (корпоративный?) репозиторий, например Artifactory.

Однако, если это невозможно, вы можете использовать локальный репозиторий в проекте (например, из вашего example) и сохраните его в своей vcs.

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

Единственный трюк заключается в том, как получить артефакты (банки) в этот локальный репозиторий:

mvn deploy:deploy-file -Dfile=fooLib.jar  -DgroupId=com.test -DartifactId=fooLib -Dversion=1.0.1 -Dpackaging=jar -Durl=file://pathTo/libRepo -DrepositoryId=in-project

И вы просто используете его как любую другую зависимость

<dependency>
        <groupId>com.test</groupId>
        <artifactId>fooLib</artifactId>
        <version>1.0.1</version>
</dependency>

Определенно не используйте system область действия, поскольку ожидается, что такие зависимости будут найдены в системе и, следовательно, не связаны с JAR.

person sodik    schedule 30.04.2015