Подтвердить что ты не робот

Лучший способ создания артефакта maven из существующей банки

Я замалчиваю некоторые проекты.

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

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

4b9b3361

Ответ 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 файлов.

Чтобы обнаружить эту информацию, скрипт делает следующее:

  1. Сначала он смотрит внутрь банки для META-INF/maven/
  2. затем он пытается найти банку по контрольной сумме SHA1 на search.maven.org
  3. затем, наконец, он помещает комментарий в файл pom.xml с информацией о манифесте jar, который поможет вам найти зависимость самостоятельно. Конечно, вы можете нигде не найти банку, и тогда вам придется разместить ее в своем собственном хранилище maven.

Вы можете получить его здесь: https://github.com/sjbotha/make-pom/