我的项目需要一个本地存储库,用于通过Maven Central存储库无法获得的JAR文件。我根据http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html使用mvn install:install-file …
安装我的JAR,使用-DlocalRepositoryPath
指示我的Git存储库中的路径,并使用-DcreateChecksum
创建校验和。
这将安装JAR,生成POM,并为所有文件生成校验和。但有趣的是,它还在groupId目录中创建了一个maven-metadata-local.xml
文件。从http://maven.apache.org/ref/3.2.5/maven-repository-metadata/我收集到local
是它为本地存储库提供的ID。
但在我的POM(mvn install:install-file
无法知道)中,我使用ID local-repo
作为我的存储库:
<repositories>
<repository>
<id>local-repo</id>
<url>file:///${project.basedir}/repo</url>
</repository>
</repositories>
当然我可以更改我的POM以简单地使用<id>local</id>
来匹配生成的文件,但我不喜欢在不了解我为什么这样做的情况下做事。所以也许有人可以告诉我:
maven-metadata-local.xml
吗?它有用吗?local
部分是否需要匹配我在POM中使用的存储库ID?mvn install:install-file
是否有参数允许我指示用于本地存储库的ID(例如,生成maven-metadata-local-repo.xml
,还是我必须手动重命名该文件?答案 0 :(得分:1)
我需要maven-metadata-local.xml吗?它有用吗?
取决于您想要做什么,我建议您阅读本文以了解maven-metadata-local.xml的作用
http://maven.apache.org/ref/3.2.5/maven-repository-metadata/
本地部分是否需要匹配我在POM中使用的存储库ID?
不,在pom中声明的id仅用于maven构建中的loggin目的,这将解释id的使用:
https://maven.apache.org/guides/introduction/introduction-to-repositories.html
mvn install:install-file是否有一个参数允许我指示用于本地存储库的ID(例如,生成maven-metadata-local-repo.xml,或者我必须在之后手动重命名文件?< / p>
是的,根据maven api指南:
https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
答案 1 :(得分:1)
我需要maven-metadata-local.xml吗?它有目的吗?
是的,您需要它。
该文件是用来存储您在该本地存储库中安装的不同版本/发行版的信息的文件。
例如,我已经在本地存储库中安装了
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中使用的存储库ID匹配?
不。它用于记录日志(当然,您需要URL是有效的存储库)。
Downloading from this-is-my-local-repo: file:///...
mvn install:install-file
是否有一个参数可以让我指出 用于本地存储库的ID(例如,用于生成 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
在本地存储库中, 用于存储库中的元数据 ,带有回购标识符。
因此,在使用“本地安装”(在./m2/repository
文件夹下为默认文件夹或在-DlocalRepositoryPath
中给定的文件夹)上进行“ mvn安装”时,创建的文件为maven-metadata-local.xml
,因为这是一个本地存储库。
类似地,在您的本地仓库中,您可以看到不同的maven-metadata-<repo-id>.xml
,因此您可以看到 工件是哪个仓库的 (例如,在我的本地仓库中,我有一个settings.xml,用于标识中央存储库,共享发行版存储库,共享快照存储库等...
.m2/repository/org/apache/maven/plugins/maven-install-plugin/maven-metadata-central.xml
.m2/repository/[...]/maven-metadata-snapshots.xml
总结
repo-id
上部署工件时会使用它: mvn deploy -DaltDeploymentRepository=my-repo::default::file:///home/jalopaba/my-repo