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

为什么在本地maven repo上安装时从工件中删除分类器?

葛成济
2023-03-14

我有一个实用程序项目,它使用gradle生成JAR工件。在生成JAR工件时,我使用这里解释的JAR任务的分类器属性。我在构建中使用的代码。格雷德尔是:

def artifactClassifier = project.hasProperty('classifier') ? classifier : "dev"
jar {
    classifier = artifactClassifier
}

我可以看到JAR是按预期生成的(myutils-1.0-test.JAR),同时我运行以下gradle构建。

$ gradle clean build -Pclassifier=test

现在,我尝试使用以下命令将此工件安装到我的本地M2回购:

$ mvn:install install-file -Dfile=/path/to/myutils-1.0-test.jar -DgroupId=my.group -DartifactId=myutils -Dversion=1.0 -Dclassifiers=test

这个安装是成功的,但是当我检查M2 repo时,我看到JAR文件位于:~/。m2/repository/my/group/myutils/1.0/myutils-1.0。jar。已安装的工件名称中缺少分类器值test。然后,我尝试将其作为依赖项添加为:

<dependency>
  <groupId>my.group</groupId>
  <artifactId>myutils</artifactId>
  <version>1.0</version>
  <classifier>test</classifier>
</dependency>

但是,maven无法解决这个问题。在我移除分类器标记后,maven可以解决依赖关系。格拉德尔也发生了同样的事情。当我添加以下内容时,Gradle未能解决依赖关系(我尝试在没有@jar的情况下解决,但也没有成功。

ext {
  myutils.version = "1.0"
}
compile "my.group:myutils:${myutils_version}:test@jar"

而在删除时:test@jar让Gradle解决依赖关系。

我正在使用Gradlev2.3和Mavenv3.3.1

我遗漏了什么吗?有人能帮我吗?


共有1个答案

杨无尘
2023-03-14

尝试使用-dclassizer(不带s)作为mvn安装:安装文件的参数。

即:

$ mvn install:install-file -Dfile=/path/to/myutils-1.0-test.jar -DgroupId=my.group -DartifactId=myutils -Dversion=1.0 -Dclassifier=test

 类似资料:
  • 问题内容: 我希望能够在OSX中的Vagrant之外使用docker。现在这是不可能的。是什么原因使其不仅仅限于linux安装? 问题答案: Docker只是系统提供的容器之上的抽象和自动化层。 技术上的限制是OS X不支持操作系统级别的虚拟化,例如Linux中的容器或FreeBSD中的jail(即使OS X是半血的BSD)。 但是,尽管如此,Docker仍旨在提供一种共享容器映像的简便方法,并确

  • 在本地多模块项目上运行时,它会构建项目工件并将其安装到本地repo中。似乎可以清理项目特定的目标目录。 我对maven使用什么命令来让它从本地repo卸载我的项目模块?例如,我的项目输出foo-0.1.jar和bar-0.2.jar,我希望将它们从本地repo中删除,而不必亲自去那里删除它们。

  • 我点击图片,弹出效果很好。但是,当我在弹出窗口外单击时,iframe allowfullscreen和frameborder属性将被删除。我再次点击弹出窗口,全屏工作,有一条白线。我希望弹出停止视频播放一旦关闭和iframe返回没有src和保留其属性。 我试过: 使用JavaScript/jQuery更新属性 通过JavaScript/jQuery替换html(已注释掉) HTML

  • 问题内容: Java在Java 5中引入了带有泛型的类型擦除,因此它们可以在Java的旧版本上使用。这是兼容性的折衷。从那以后,我们就失去了兼容性–字节码可以在JVM的更高版本上运行,但不能在较早的版本上运行。这似乎是最糟糕的选择:我们丢失了类型信息,并且仍然无法在较旧版本上运行针对较新版本JVM编译的字节码。发生了什么? 具体来说,我是在问是否存在任何技术原因,导致无法在下一版JVM中删除类型擦

  • 我有一个用户 - 一个通道关系(频道有一个头像,它存储在本地驱动器上,数据库存储照片的路径。删除通道时,从本地驱动器中删除文件的最佳位置和方式在哪里?在外观、服务或每天检查一次数据库是否包含实体并且文件夹与之对应,如果文件夹存在但实体不存在,则删除它? 目前我只是使用实体管理器删除,但它不会从本地驱动器中删除照片

  • Java在Java5中引入了泛型的类型擦除,因此它们可以在Java的旧版本上工作。这是一个兼容性的折衷。从那以后,我们就失去了兼容性[1][2][3]--Bytecode可以在JVM的更高版本上运行,但不能在更早的版本上运行。这看起来可能是一个更糟糕的选择:我们丢失了类型信息,并且仍然无法在旧版本的JVM上运行为较新版本的JVM编译的字节码。怎么了? 具体地说,我想问的是,在JVM的下一个版本中为