安装POM时设置本地存储库ID

时间:2018-06-11 20:55:25

标签: java maven pom.xml

我的项目需要一个本地存储库,用于通过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,还是我必须手动重命名该文件?

2 个答案:

答案 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吗?它有目的吗?

是的,您需要它。

该文件是用来存储您在该本地存储库中安装的不同版本/发行版的信息的文件。

例如,我已经在本地存储库中安装了

  • 首先,是jar文件的0.2.0版本。
  • 第二,0.1.0快照。

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

总结

  • 只有一个本地存储库,因此没有ID可在“安装文件”中选择它。
  • 存储库ID用于您可能拥有的不同存储库(例如,一个名为“ my-releases”的发行版的存储库,另一个名为“我的快照”的快照的存储库)。在repo-id上部署工件时会使用它:

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