我正在学习" import" maven中的范围,并在下面做了一个示例项目,
Project_1 POM文件:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
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中不可用。当我从project_1 POM文件中删除dependencyManagement标记时。一切正常。 但根据maven docs,
此范围仅在类型为pom的依赖项中受支持 部分。它表明了依赖性 替换为指定的有效依赖项列表 POM的部分。因为它们被替换了, 具有导入范围的依赖项实际上不参与 限制依赖的传递性。
我已经完成了文档中提到的,这里出了什么问题?
答案 0 :(得分:0)
首先确保您使用支持此功能的Maven版本2.0.9或更高版本。 其次,Project1 Pom.Xml缺少属性“打包”确保您的包装和类型具有相同的名称,以便它继承所有依赖项。
此外,您的工件ID和组ID必须与项目1的Pom.xml文件相同,才能导入依赖项
答案 1 :(得分:0)
看起来您正在尝试使用物料清单(BOM)POM并导入它。
在这种情况下,您的 Date Category has_egg values
0 2017-01-01 Lunch True 0.0
1 2017-01-02 Lunch True 1.0
2 2017-01-02 Lunch False 1.0
3 2017-01-02 Dinner True 0.0
4 2017-01-12 Lunch False 2.0
5 2017-01-13 Breakfast False 0.0
6 2017-01-13 Dinner False 1.0
7 2017-02-04 Lunch True 0.0
是BOM POM,并且您在Project_1
元素中包含了所有项目的依赖项。看起来你正确地做到了这一点。
要在项目中导入BOM POM,您需要同时<dependencyManagement>
和<dependencyManagement>
。
例如,您的<dependencies>
Project_2
应包含:
pom.xml
以下是上述示例的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>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>
Apache Maven网站上有documentation about this(搜索&#34; bom&#34;)。
<强>更新强>
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>
<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>
以下是上述示例的父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>