【问题标题】:Path to local maven repository programmatically?以编程方式到本地 Maven 存储库的路径?
【发布时间】:2017-12-15 09:29:07
【问题描述】:

我想在 Matlab 中确定本地 maven 存储库的位置,并以与 mvn 命令相同的方式执行此操作。这可能吗?

另外,我不想明确地模仿整个 Maven 逻辑。

是否有我可以导入并知道 Maven 期望本地存储库位于何处的 jar?

【问题讨论】:

  • 请注意:“整个 Maven 逻辑”实际上非常简单。 Maven 在用户目录的子目录.m2 中查找settings.xml。如果它不存在或不包含有关本地存储库的条目,则本地存储库只是.m2/repository。否则,从settings.xml 读取新的本地存储库。
  • @JFMeier 如何证明这一点(例如文档)?
  • 这只是凭经验。或者,stackoverflow.com/questions/5916157/… 可能会有所帮助。

标签: java matlab maven


【解决方案1】:

存储库的位置由名为setting.xml 的配置文件的localRepository 条目定义,它位于{M2_HOME}\conf\,如下所示:

<settings>
    <!-- ... -->
    <localRepository>...</localRepository>
    <!-- ... -->
</settings>

如果配置文件不存在或不包含上述条目,则使用默认位置,对应:

  • ~/.m2/repository 下 *NIX / MaxOS
  • C:\Documents and Settings\{USERNAME}\.m2\repository 下 Windows

您唯一的解决方案是找到setting.xml 文件并对其进行解析以提取存储库的位置。如果后者没有定义,则需要根据当前底层操作系统适当默认。

这个过程可能很棘手,尤其是当您必须在您的 Matlab 代码中实现跨系统兼容性时。我建议您使用涉及system function 的替代方案:

[status,cmdout] = system('mvn help:effective-settings');

如果命令运行没有问题,cmdout 将包含setting.xml 文件的全部内容。一旦你有了它,你就可以解析 XML 数据并找到文件夹。

【讨论】:

  • 解决方案不完整,因为 Maven 可能在运行时使用 -s 选项指定了设置文件的不同位置。这可以显式完成,也可以通过添加标志 ot .mvn/maven.config(在 3.3.x 之后的 Maven 版本中)来完成。此外,可能已使用 maven.repo.local Java 系统属性指定了存储库。
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2012-09-07
  • 2015-09-07
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多