【问题标题】:Wrap groupId value in maven dependency specification在 Maven 依赖规范中包装 groupId 值
【发布时间】:2019-11-01 22:42:26
【问题描述】:

我正在尝试在我的应用程序中添加 log4j-rolling-appender 库作为依赖项。该罐子可在此处获得:

https://mvnrepository.com/artifact/uk.org.simonsite/log4j-rolling-appender/

我在 pom.xml 中添加了以下两件事(存储库和 jar 规范)。下面是sn-p:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        <modelVersion>4.0.0</modelVersion>
        ...
        ...
        <repositories>
            <repository>
                <id>log4j-appender</id>
                <name> Repository for log4j-rolling-appender</name>
                <url>https://mvnrepository.com/artifact/</url>
            </repository>
        </repositories>

        <dependency>
            <groupId>uk.org.simonsite</groupId>
            <artifactId>log4j-rolling-appender</artifactId>
            <version>20131024-2017</version>
        </dependency>
        ...
        ...
</project>

在构建时,maven 会生成以下 URL 来下载不正确的依赖项(尽管按照标准,它是正确的,但在我的情况下是不正确的):

https://mvnrepository.com/artifact/uk/org/simonsite/log4j-rolling-appender/20131024-2017/log4j-rolling-appender-20131024-2017.pom

注意 groupId(uk.org.simonsite) 中提到的包如何转换为 URL (../uk/org/simonsite/) 中的包层次结构。

可以找到 JAR 并且我希望 maven 生成的 URL 是:

https://mvnrepository.com/artifact/uk.org.simonsite/log4j-rolling-appender/20131024-2017/log4j-rolling-appender-20131024-2017.pom

有人可以就我如何指示 maven 在生成 URL 时跳过此转换提供任何建议吗?

【问题讨论】:

  • 看来你可以在这个仓库找到它:maven.icm.edu.pl/artifactory/repo/uk/org/simonsite/…
  • @Thilo 谢谢。但是我希望 maven 生成这个 URL 并处理依赖项下载。我可以更改存储库位置,但问题保持不变。
  • @Thilo 添加更多...您评论中的存储库肯定会解决我当前的问题。但是我仍然想知道我提出的实际问题的答案。
  • 我认为 Maven 生成的 URL 是“正确的”。你说你想要的那个会产生一个 404 Not Found mvnrepository.com/artifact/uk.org.simonsite/… mvnrepository.com 我认为不提供下载,它只是一个搜索门户。
  • 另外,也许您可​​以使用其他库? log4j自带的RollingFileAppender不好用?

标签: java maven log4j


【解决方案1】:

如果您使用了多个依赖项,那么您应该尝试使用注释包装所有依赖项。

同样遵循模式:

<project>
    <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-b</artifactId>
      <version>1.0</version>
      <type>bar</type>
      <scope>runtime</scope>
    </dependency>

  <repositories>
    <repository>
      <id>my-internal-site</id>
      <url>http://myserver/repo</url>
    </repository>
  </repositories>
  ...
</project>

范围系统的依赖项始终可用,并且不会在存储库中查找。始终按顺序在存储库之前先使用依赖项。

【讨论】:

    【解决方案2】:

    Maven 存储库具有用于解析 Maven 坐标的固定格式。

    在起始 URL 之后,是带有 / 而不是 . 的 groupId,然后是 artifactId,然后是版本,然后是包含 artifactId、版本、分类器(如果存在)和扩展名的文件名。

    如果您想从不同的 URL 绘制 jar,则该 URL 不是 Maven 存储库。您应该首先下载 jar 并将其安装到您的公司存储库(或您自己的本地存储库,如果没有其他可用的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      相关资源
      最近更新 更多