当前位置: 首页 > 知识库问答 >
问题:

在maven依赖规范中包装group pId值

辛建业
2023-03-14

我试图添加log4j滚动appender库作为我的应用程序中的依赖项。罐子可以在这里买到:

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

我在下面的代码片断中添加了以下2pom.xml.内容(存储库和jar规范):

<?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/)中的包层次结构的。

我希望maven生成的JAR的URL是:

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

有人能提供一些建议,说明我如何指导maven在生成URL时跳过此转换?

共有2个答案

乐正迪
2023-03-14

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

还应遵循以下模式:

<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>

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

羊舌琛
2023-03-14

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

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

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

 类似资料:
  • 我不断得到原因:java.nio.file.nosuchfileException:C:\Program Files\Apache Software Foundation\Tomcat 9.0\WTPWebApps\WebApp\WEB-INF\lib\Jackson-DataBind-2.9.6.jar Exception。我的pom.xml文件中有2.9.6版本的依赖项,但Maven depe

  • 问题内容: 有没有一种方法可以强制maven(2.0.9)将所有依赖项包含在单个jar文件中? 我有一个构建到单个jar文件中的项目。我希望将依赖项中的类也复制到jar中。 更新:我知道我不能只在jar文件中包含jar文件。我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中。 问题答案: 你可以使用带有描述符的插件来执行此操作。这是我们之一的相关块,它可以完成此任务:

  • 问题内容: 我想使用maven shade创建一个有阴影的jar,但我也想仅在有阴影的jar的情况下才包含一个特殊的依赖项(而不是在我项目的普通编译依赖项中)。我该怎么办? 根据我的理解,包含/排除项只是白名单/黑名单,因此我无法明确强制要包含的内容未包含在实际依赖项列表中。 对于更多上下文,我有一个JAR依赖项,其中包含只希望包含在我的一个阴影工件中的资源,但是如果在类路径中使用该jar会导致错

  • 根据我的理解,包含/排除只是白名单/黑名单,所以我不能显式地强制包含一些没有包含在实际依赖列表中的内容。 为了获得更多的上下文,我有一个JAR依赖项,它包含一个资源,我只希望它包含在我的shade工件中,但是在类路径上使用该JAR会导致错误。 明确地说,我希望在一个调用中生成一个带有附加依赖项的阴影jar,以及一个没有附加依赖项的普通jar。

  • 主要内容:依赖声明,获取依赖坐标Maven 是一款优秀的依赖管理工具,那么什么是依赖呢? 通俗的说,如果一个 Maven 构建所产生的构件(例如 Jar 文件)被其他项目引用,那么该构件就是其他项目的依赖。 依赖声明 Maven 坐标是依赖的前提,所有 Maven 项目必须明确定义自己的坐标,只有这样,它们才可能成为其他项目的依赖。当一个项目的构件成为其他项目的依赖时,该项目的坐标才能体现出它的价值。 当 Maven 项目需要声

  • Gradle 支持从 Maven 或 Ivy 仓库中拉取依赖文件。首先必须将仓库添加到列表中,然后必须在 dependencies 中添加 Maven 或 Ivy 声明的包。 repositories { jcenter() } dependencies { compile 'com.google.guava:guava:18.0' } android { ... } 注意