Лучший способ создать артефакт 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.

Другие вопросы по тегам