Лучший способ создать артефакт Maven из существующей банки - PullRequest
31 голосов
/ 01 февраля 2010

Я проектирую некоторые проекты.

Все эти проекты зависят от ряда библиотек, большинство из которых доступны в репозитории Maven. Для других библиотек я бы хотел создать артефакт maven, чтобы я мог использовать его в качестве зависимости. Проблема в том, что у меня есть только файлы jar этих библиотек.

Каков наилучший способ создания артефактов из существующих файлов JAR?

Ответы [ 5 ]

29 голосов
/ 01 февраля 2010

Если вы не используете удаленный репозиторий (что является обычной ситуацией для личного развития), просто 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 голосов
/ 01 февраля 2010

Вы можете использовать Maven Deploy Plugin , чтобы загрузить свой JAR-файл (и, возможно, файл POM, хотя по умолчанию он будет создан для вас) в ваш репозиторий Maven.

1 голос
/ 04 февраля 2014

Вы также можете создавать «системные» зависимости от 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>
1 голос
/ 01 февраля 2010

Как сказал Данбен , вам придется развернуть эти файлы в хранилище. Однако из вашего вопроса мне кажется, что у вас нет хранилища, кроме глобального maven.

Вы можете использовать Nexus или Artifactory .

0 голосов
/ 01 февраля 2010

Я знаю вашу проблему. Mavenizing jar - это иногда боль (особенно если они имеют дополнительные переходные зависимости, которые также должны быть определены в pom.xml).

Вы проверили, действительно ли эти библиотеки никогда не существуют как maven deps? Посмотрите на обычных подозреваемых:

Иногда мне нравится использовать диалог загрузки jar Nexus для создания файлов pom.xml.

...