Установка локального идентификатора репозитория при установке 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