我在maven中学习了“导入”范围,并做了下面的一个示例项目,
Project_1POM文件:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
项目2 POM文件:
<parent>
<groupId>com.sample</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
...
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.sample</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
但是,这会引发一个错误,说明JUnit包在Project2中不可用。当我从POM文件中删除依赖管理标记project_1。一切工作正常。但是根据专家医生的说法,
此范围仅在节中pom类型的依赖项上受支持。它表示要用指定POM节中的有效依赖项列表替换的依赖项。由于它们被替换,具有导入范围的依赖项实际上并不参与限制依赖项的传递性。
我已经按文件上说的做了,这里出了什么问题?
首先确保您正在使用支持此功能的Maven 2.0.9或更高版本。第二你的Project1 Pom.xml缺少属性“包装”确保您的包装和类型同名,以便它继承所有依赖项。
此外,您的工件Id和组Id必须与项目1的Pom相同。用于导入依赖项的xml文件
如有疑问,请参阅此链接https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies
看起来您正在尝试使用BOM表POM并导入该POM。
在本例中,您的Project_1
是BOM POM,您在
然而,要在项目中导入BOM POM,您需要两个
例如,您的
Project_2
pom.xml
应包括:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencyManagement>
<dependencies>
<!-- Imports the bill-of-materials POM. -->
<dependency>
<groupId>com.sample</groupId>
<artifactId>bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Add a dependency from the BOM POM.
Note: no version or scope is required, it's inherited from the BOM POM! -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
以下是上述示例的BOM POM定义:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>bom</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
ApacheMaven网站上有关于此的文档(搜索“bom”)。
更新:
BOM POM和父POM相似但不同。BOM POM纯粹用于将依赖项导入到项目中。父POM用于多模块项目,允许您定义Maven坐标、插件和依赖项,这些将由使用父POM的所有模块继承。
下面是一个使用来自父POM的继承依赖项的示例。请注意,这里包含的几个元素在BOM POM中没有意义。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sample</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project1</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- Inherited from the parent POM. -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
以下是上述示例的父POM定义:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>child1</module>
<module>child2</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--Global dependencies...-->
</dependencies>
<build>
<pluginManagement>
<!--Plugins...-->
</pluginManagement>
</build>
</project>
我正在使用Maven,我希望使用一些在dependencyManagement部分中有许多依赖项的工件作为父POM。但是我也希望在我的POM中有一个dependencyManagement部分,因为我的工件将是其他一些子模块的父POM。 示例: 假设这两个父POM都为某些依赖项定义了一个版本(假设jackson的版本),但每个都有不同的版本。
maven允许您在pom文件中定义: (A) - (B) /- 如果我把错误/未知的工件放在A类-maven肯定会失败。 如果我将错误/未知工件放在类别B上-maven只会在它影响类别A时失败(例如,A在上定义dep,B在
我有一个漂亮的BOM,它的依赖管理部分有很多依赖项,我想创建另一个BOM来导入除一个之外的所有依赖项。我尝试这样做: POM在形式上是正确的,一切都可以编译。但是排除被简单地忽略了。我错过了什么?这种方法正确吗? 我正在使用Maven 3。
问题内容: 我正在运行一个依赖groovy 1.7-beta-1的项目。gmaven插件使用groovy 1.6版作为依赖项。在pom中,我在依赖性管理部分中将grooyv-all版本指定为: 但是,当我在调试模式下运行maven时,我看到groovy 1.6被用于对gmaven插件的依赖。我以为我的依赖项管理部分会重写此设置,因此它们都使用1.7-beta-1,但是由于常规版本不同,我遇到了错误
问题内容: 我有一个依赖关系如下: 当我部署一切正常时,这将拉下另一个引发ClassDefNotFound的依赖项。 我添加了两个依赖项,如下所示: 并且仍然面临着同样的问题,即:MVN带来下来不 我该如何解决? 编辑: 添加; 问题答案: 您可能有一个传递依赖项,另一个依赖项取决于您不需要的版本。 要获得所有直接和传递依赖关系的概述,请尝试: mvn依赖项:树 如果您发现同一依赖项的不同版本之间
我尝试在依赖项中提供,这解决了构建问题,但在运行时遇到了以下问题。