Установка локального идентификатора репозитория при установке POM

Мне нужен локальный репозиторий для моего проекта для JAR файла, недоступного через репозиторий Maven Central. Я устанавливаю свой JAR, используя mvn install:install-file … согласно http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html, используя -DlocalRepositoryPath чтобы указать путь в моем Git и используя -DcreateChecksum для создания контрольных сумм.

Это устанавливает JAR, генерирует POM и генерирует контрольные суммы для всех файлов. Но интересно это также создает файл maven-metadata-local.xml в каталоге groupId. Из http://maven.apache.org/ref/3.2.5/maven-repository-metadata/ Я понимаю, что local - это идентификатор, который он предоставляет локальному репозиторию.

Но в моей POM (mvn install:install-file не знал) я использую local-repo ID для моего репозитория:

<repositories>
  <repository>
    <id>local-repo</id>
    <url>file:///${project.basedir}/repo</url>
  </repository>
</repositories>

Конечно, я мог бы изменить свой POM, чтобы просто использовать <id>local</id> чтобы соответствовать сгенерированным файлам, но мне не нравится делать что-то, не понимая, почему я это делаю. Так может быть, кто-нибудь может сказать мне:

  • Нужен ли мне maven-metadata-local.xml? Это служит цели?
  • Должна ли local часть соответствовать идентификатору репозитория, который я использую в POM?
  • mvn install:install-file ли mvn install:install-file имеет параметр, позволяющий мне указывать идентификатор, который будет использоваться для локального репозитория (например, для генерации maven-metadata-local-repo.xml или мне нужно вручную переименовать файл позже?

Ответ 1

Нужен ли мне maven-metadata-local.xml? Это служит цели?

В зависимости от того, что вы хотите сделать, я предлагаю вам прочитать это, чтобы понять роль maven-metadata-local.xml

http://maven.apache.org/ref/3.2.5/maven-repository-metadata/

Должна ли локальная часть соответствовать идентификатору репозитория, который я использую в POM?

Нет, id, объявленный в pom, предназначен только для логарифмического назначения durring maven build, это вы объясните использование id:

https://maven.apache.org/guides/introduction/introduction-to-repositories.html

Установлена ли mvn: install-file имеет параметр, позволяющий мне указывать идентификатор, который будет использоваться для локального репозитория (например, для генерации maven-metadata-local-repo.xml или мне нужно вручную переименовать файл позже?

да согласно руководству maven api здесь:

https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

Ответ 2

Нужен ли мне maven-metadata -local.xml? Это служит цели?

Да, вам это нужно.

Это файл, созданный для хранения информации о различных версиях/выпусках, которые вы установили в этом локальном репо.

Например, я установил локальное репо:

  • Во-первых, выпуск 0.2.0 файла jar.
  • Во-вторых, 0.1.0-SNAPSHOT.

Соответственно обновляется maven-metadata-local.xml:

$ ls -l
drwxrwxr-x. 2 4096 Jun 21 16:14 0.1.0-SNAPSHOT
drwxrwxr-x. 2 4096 Jun 21 16:12 0.2.0
-rw-rw-r--. 1 349 Jun 21 16:14 maven-metadata-local.xml
-rw-rw-r--. 1 32 Jun 21 16:14 maven-metadata-local.xml.md5
-rw-rw-r--. 1 40 Jun 21 16:14 maven-metadata-local.xml.sha1

Чтобы:

$ cat maven-metadata-local.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
[...]
  <versioning>
    <release>0.2.0</release>
    <versions>
      <version>0.2.0</version>
      <version>0.1.0-SNAPSHOT</version>
    </versions>
    <lastUpdated>20180621151442</lastUpdated>
  </versioning>
</metadata>

Должна ли локальная часть соответствовать идентификатору репозитория, который я использую в POM?

Нет. Это для целей ведения журнала (конечно, вам нужен URL-адрес действительного репо).

Downloading from this-is-my-local-repo: file:///...

mvn install:install-file ли mvn install:install-file имеет параметр, позволяющий указать идентификатор, который будет использоваться для локального репозитория (например, для генерации maven-metadata -local -repo.xml или мне нужно вручную переименовать файл позже?

Нет, вам не нужно переименовывать файл. Суффикс "-local" означает, что информация метаданных, которую он имеет, является "локальной" для этого репо.

Чтобы сделать это более ясным, как описано в http://maven.apache.org/ref/3.5.2/maven-repository-metadata/:

Имя файла метаданных:

  • maven-metadata.xml в удаленном репозитории,
  • maven-metadata-<repo-id>.xml в локальном репозитории, для метаданных из репозитория с идентификатором репо-идентификатора.

Поэтому при создании "mvn install" в используемом локальном репо (по умолчанию в папке ./m2/repository или в -DlocalRepositoryPath указанном в -DlocalRepositoryPath), созданный файл представляет собой maven-metadata-local.xml поскольку он ЛОКАЛЬНЫЙ репозиторий.

Аналогично, на вашем локальном репо вы можете увидеть разные maven-metadata-<repo-id>.xml чтобы вы могли видеть, с какого репо находится артефакт (пример из моего локального репо, где у меня есть параметр maven-metadata-<repo-id>.xml определяющий центральный репо, общий релиз репо, общие реплики снимков и т.д....

.m2/repository/org/apache/maven/plugins/maven-install-plugin/maven-metadata-central.xml.m2/repository/[...]/maven-metadata-snapshots.xml

Подводя итоги,

  • Существует ТОЛЬКО ОДИН локальный репо, поэтому нет идентификатора, чтобы выбрать его в "установочном файле".
  • Идентификатор Repo предназначен для разных репозиториев, которые вы можете иметь (например, репо для выпусков с именем "my-релизы", другое для снимков с именем "мои снимки"). Этот repo-id используется при развертывании артефакта:

mvn deploy -DaltDeploymentRepository=my-repo::default::file:///home/jalopaba/my-repo