我正在尝试将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 compile
或mvn 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
答案 0 :(得分:2)
当您在maven中拥有一个多模块项目时,通常会使用dependencyManagement
标记(您将拥有父子关系)。
如果您在dependencyManagement
标记中指定任何依赖项,则 NOT 实际下载依赖项。
将依赖项放在此标记中只意味着该子代码可用于(下载/使用)子pom。子pom必须明确提供groupId
和artifactId
坐标来下载并使用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
标签最有意义,这不是你的情况。