gradle 到 maven 转换,解析依赖项的版本名称中的通配符“+”?
gradle to maven conversion, resolve wildcard "+" in version name of dependencies of dependencies?
我已经阅读了其他问题,但它们不完全是我的问题。
我有一组项目目前正在使用 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文件中也没有它们。我认为它们是我的项目依赖项的依赖项。
更新 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
我已经阅读了其他问题,但它们不完全是我的问题。
我有一组项目目前正在使用 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文件中也没有它们。我认为它们是我的项目依赖项的依赖项。
更新 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