java - gradle到Maven转换,在依赖项的依赖项版本名称中解析通配符 “+”?

标签 java maven gradle dependencies pom.xml

我已经阅读了其他问题,但它们不完全是我的问题。

我有一些当前正在使用Gradle构建的项目,并且我正在尝试将所有内容切换到Maven,因为在使用通配符“+”的版本中,这些项目自然基于Gradle。
我可以在生成“ BaseProject ”的单个pom并转换时解决此问题:

"projectA-1.0.+" --> "projectA-1.0.0"

而且效果很好。但是我的问题是,“projectA-1.0.0”本身依赖于“projectC-1.0。+”,“projectD-1.0。+”和“projectE-1.0。+”,因此自然会出现编译错误。
问题在于每个项目都依赖于另一个项目,当然,编辑其他所有项目看起来并不那么有趣。
"projectA-1.0.0"--> "projectC-1.0.+"
               \--> "projectD-1.0.+"
               \--> "projectE-1.0.+"--> "projectX-1.0.+" 
                                   \--> "projectZ-1.0.+" 

有任何可能的解决方案或解决此问题的方法吗?

更新1

这是我的错误日志的图片,请注意,这些提到的构件没有在我的项目中直接使用,并且我的pom文件中没有它们。我认为它们是我的项目依赖项的依赖项。

enter image description here

更新2

这是次要依赖项的pom的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>mygroup</groupId>
  <artifactId>Myartifact</artifactId>
  <version>1808.0.0</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.6.2</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>mygroup</groupId>
      <artifactId>mysecondaryartifact</artifactId>
      <version>1805.0.0+</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

用“+”解析的版本,而不仅仅是在这pom中,这个问题存在于从gradle转换的所有依赖项中。

更新3

正如您在依赖关系树中看到的那样,所有版本都被翻译为maven可理解的版本,并且maven可以理解它们,但是maven不能理解其中的一些。
+--- mygroup:myartifact:1808.0.+ -> 1808.0.0
|    +--- org.apache.logging.log4j:log4j-api:2.6.2
|    +--- org.apache.logging.log4j:log4j-core:2.6.2 (*)
|    +--- mygroup:mysecondaryartifactA:1805.0.0+ -> 1805.0.0 (*)    Resolves
|    +--- mygroup:mysecondaryartifactB:1805.0.+ -> 1902.0.0 (*)   Resolves
|    +--- mygroup:mysecondaryartifactC:1808.0.+ -> 1907.0.0       Resolves
|    \--- mygroup:mysecondaryartifactD:2.0.+ -> 2.0.0  Does not Resolve --> Missing artifact mygroup:mysecondaryartifactD:2.0.+
|         \--- commons-primitives:commons-primitives:1.0  

最佳答案

使用maven 5.2.1或更高版本,有一个名为publishtoMavenLocal的任务,该任务在所看到的位置后面使用版本映射器,并且使用此版本的maven发布将解析build \ publications \ mavenjava中已创建的pom中插件的实际使用版本。

关于java - gradle到Maven转换,在依赖项的依赖项版本名称中解析通配符 “+”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60492125/

相关文章:

tomcat - 为什么 Apache Tomcat Maven 插件上传 WAR 文件两次?

java - 如何在 Tycho 构建中设置 Java 编译器兼容性?

gradle - 如何在 Gradle 中下载和引用单个工件?

spring-boot - Spring Boot Dev Tools/Live Reloading - 静态资源刷新不起作用

java - Java 中内部锁定提供的内存可见性保证?

java - 我正在尝试在 Applet 中添加音频 url

java - keystore 被篡改,或密码不正确 - Java Springboot应用程序

java - 从 android 上传图像到 php web 服务器不起作用

gradle - 获取已执行自定义gradle脚本的所有项目

maven - 当在Team City CI上调用Gradle安装任务时,Maven Artifact 会部署到错误的位置