Лучший способ создать артефакт Maven из существующей банки
Я создаю некоторые проекты.
Все эти проекты зависят от ряда библиотек, большинство из которых доступны в репозитории Maven. Для других библиотек я хотел бы создать артефакт maven, чтобы я мог использовать его как зависимость. Проблема в том, что у меня есть только файлы jar этих библиотек.
Каков наилучший способ создания артефактов из существующих файлов JAR?
5 ответов
Если вы не используете удаленный репозиторий (что является обычной ситуацией для личного развития), просто install
эти артефакты в вашем локальном хранилище, используя install:install-file
харизмы:
mvn install:install-file
-Dfile=<path-to-file>
-DgroupId=<group-id>
-DartifactId=<artifact-id>
-Dversion=<version>
-Dpackaging=<packaging>
-DgeneratePom=true
Where: <path-to-file> the path to the file to load
<group-id> the group that the file should be registered under
<artifact-id> the artifact name for the file
<version> the version of the file
<packaging> the packaging of the file e.g. jar
Но очевидно, что это сделает вашу сборку не переносимой (хотя это может и не быть проблемой). Чтобы не жертвовать переносимостью, вам нужно будет сделать артефакты доступными в удаленном хранилище. В корпоративном контексте наиболее распространенным способом решения этой проблемы является установка корпоративного хранилища (и в этом случае deploy
артефакты действительно).
Обновление: как только ваш артефакт установлен в вашем локальном хранилище, просто объявите <dependency>
элемент в вашем pom, как для любой другой зависимости, например:
<dependency>
<groupId>aGroupId</groupId>
<artifactId>aArtifactId</artifactId>
<version>1.0.12a</version>
<packaging>jar</packaging>
</dependency>
Вы также можете создавать "системные" зависимости от jar-файлов, которых нет в репозитории, находящемся в проекте. Например,
<dependency>
<groupId>com.example</groupId>
<artifactId>MySpecialLib</artifactId>
<version>1.2</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath>
</dependency>
Вы можете использовать плагин Maven Deploy для загрузки вашего JAR-файла (и, необязательно, файла POM, хотя по умолчанию он будет создан для вас) в ваш репозиторий Maven.
Как сказал Данбен, вам придется развернуть эти файлы в хранилище. Тем не менее, я понимаю из вашего вопроса, что у вас нет хранилища, кроме глобального maven.
Вы можете использовать Nexus или Artifactory.
Я знаю твою проблему. Mavenizing jar иногда является болью (особенно если они имеют дополнительные переходные зависимости, которые также должны быть определены в pom.xml).
Вы проверили, действительно ли эти библиотеки никогда не существуют как maven deps? Посмотрите на обычных подозреваемых:
Иногда мне нравится использовать диалог загрузки jar Nexus, чтобы позволить создавать файлы pom.xml.