Maven:如何导入pom类型的依赖?

时间:2016-08-11 10:08:25

标签: maven dependencies pom.xml byte-order-mark

我正在尝试将java应用程序迁移到maven。到目前为止,有一些依赖项已作为jar文件提供。其中一个依赖项是jung2,可以从maven存储库中获取:mvnrepository.com

我需要所有提供的模块,我不明白如何在我的pom.xml中正确声明这种依赖,以便下载所有相应的jar文件,并且这些类在编译时可用。

这就是我的pom.xml文件现在的样子:

<?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>groupId</groupId>
    <artifactId>myProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/net.sf.jung/jung2 -->
            <dependency>
                <groupId>net.sf.jung</groupId>
                <artifactId>jung2</artifactId>
                <version>2.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement> 
</project>

我也尝试省略<scope>import</scope>并将依赖项放入dependencies部分。执行mvn compilemvn package时,会出现相应软件包不存在的错误消息。

如果我在dependency内添加dependencies但在dependencyManagement之外添加,{

<dependencies>
    <dependency>
    <groupId>net.sf.jung</groupId>
    <artifactId>jung2</artifactId>
</dependency>

我收到有关丢失版本的错误。但据我所知,由于dependencyManagement,这不应该是必要的?如果我还添加<version>2.0.1</version>,则会收到以下错误消息:

Failure to find net.sf.jung:jung2:jar:2.0.1

1 个答案:

答案 0 :(得分:2)

当您在maven中拥有一个多模块项目时,通常会使用dependencyManagement标记(您将拥有父子关系)。

如果您在dependencyManagement标记中指定任何依赖项,则 NOT 实际下载依赖项。 将依赖项放在此标记中只意味着该子代码可用于(下载/使用)子pom。子pom必须明确提供groupIdartifactId坐标来下载并使用jar来编译它的类。

如果您只有一个单独的模块项目(看起来像您的单个模块项目),那么您可以通过不使用dependencyManagement标记来解决此问题。 只需将您的罐子放在dependencies标签中。

例如:

<dependencies>
    <dependency>
        <groupId>com.abc</groupId>
        <artifactId>def</artifactId>
        <version>1.0.0</version>
        <type>pom</type>       // This will now download the pom and its associated transitive dependent jars
    </dependency>
    <dependency>
        <groupId>com.pqr</groupId>
        <artifactId>xyz</artifactId>
        <version>1.0.0</version>
        <type>pom</type>    // This will now download the pom and its associated transitive dependent jars
    </dependency>
</dependencies>

就像我之前说的那样,如果你有一个多模块项目,那么dependencyManagement标签最有意义,这不是你的情况。