Лучший способ создания артефакта maven из существующей банки
Я замалчиваю некоторые проекты.
Все эти проекты зависят от ряда библиотек, большинство из них доступны в maven repo.
Для других библиотек я хотел бы создать артефакт maven, поэтому я могу использовать его как зависимость. Проблема в том, что у меня есть только файлы jar из этих библиотек.
Каков наилучший способ создания артефактов из существующих файлов jar?
Ответы
Ответ 1
Если вы не используете удаленный репозиторий (это обычная ситуация для личного развития), просто install
эти артефакты в вашем локальном репозитории с помощью install:install-file
mojo:
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>
Ответ 2
Вы можете использовать Maven Deploy Plugin для загрузки вашего JAR файла (и, возможно, POM файл, хотя по умолчанию он будет создан для вы) в ваш репозиторий Maven.
Ответ 3
Как danben сказал, вам придется развернуть эту банку в репозиторий. Тем не менее, я, кажется, понимаю из вашего вопроса, что у вас нет репозитория, кроме глобального maven.
Вы можете использовать Nexus или Artifactory.
Ответ 4
Вы также можете создавать зависимости "системы" от баннеров, которые не находятся в репозитории, которые находятся в проекте. Например,
<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>
Ответ 5
Я знаю вашу проблему. Mavenizing jars иногда является болью (особенно если у них есть дополнительные транзитивные зависимости, которые также необходимо определить в pom.xml).
Вы проверили, действительно ли эти библиотеки никогда не существуют, как maven deps? Взгляните на обычных подозреваемых:
Иногда мне нравится использовать диалог загрузки Nexus jar, чтобы создавать файлы pom.xml.
Ответ 6
Я создал скрипт, который поможет вам создать тег зависимостей pom.xml, если у вас есть папка, полная jar файлов.
Чтобы обнаружить эту информацию, скрипт делает следующее:
- Сначала он смотрит внутрь банки для META-INF/maven/
- затем он пытается найти банку по контрольной сумме SHA1 на search.maven.org
- затем, наконец, он помещает комментарий в файл pom.xml с информацией о манифесте jar, который поможет вам найти зависимость самостоятельно. Конечно, вы можете нигде не найти банку, и тогда вам придется разместить ее в своем собственном хранилище maven.
Вы можете получить его здесь: https://github.com/sjbotha/make-pom/