有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解析POM中没有relativePath的模块依赖关系?

我正在从事一个项目,我们正在分析Maven Central工件中的依赖关系。我需要做的是使用org.apache.maven.plugins:maven-dependency-plugin:3.1.1:tree将依赖项提取为GraphML,对于简单的项目,这很容易

但是,对于pom中具有<module>依赖项但没有relativePath的项目,我无法解决这些依赖项:

我的示例是Apache Hivemind项目pom,模块部分:

<modules>
    <module>framework</module>
    <module>xml</module>
    <module>annotations</module>
    <module>library</module>
    <module>jmx</module>
    <module>examples</module>
</modules>

这将导致此输出:

[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project org.apache.hivemind:hivemind-project:2.0-alpha-1 (/data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom) has 6 errors
[ERROR]     Child module /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/framework of /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom does not exist
[ERROR]     Child module /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/xml of /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom does not exist
[ERROR]     Child module /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/annotations of /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom does not exist
[ERROR]     Child module /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/library of /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom does not exist
[ERROR]     Child module /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/jmx of /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom does not exist
[ERROR]     Child module /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/examples of /data/scratch/artifacts/org/apache/hivemind/hivemind-project/2.0-alpha-1/hivemind-project-2.0-alpha-1.pom does not exist

我将所有这些依赖项下载到我的本地repo中

如何调用mvn,以便让它在本地repo(或我指定的任何repo)中查找依赖项


共 (1) 个答案

  1. # 1 楼答案

    一位同事建议我尝试一种稍微不同的方法:将POM中的工件作为新(临时)POM中的依赖项

    因此,对于org.apache.hivemind:hivemind-framework:2.0-alpha-1,按如下方式构造一个临时POM:

    <?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>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1</version>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.hivemind</groupId>
                <artifactId>hivemind-framework</artifactId>
                <version>2.0-alpha-1</version>
            </dependency>
        </dependencies>
    </project>
    

    然后使用临时POM作为-f参数