Maven项目缺少Maven Dependencies解决方法总结

 

一、今天搭建了一个maven项目,在pom.xml文件引入依赖后,发现项目结构中没有Maven Dependencies文件(下图),但是在java Build Path中又可以找到Maven Dependencies文件(如下图):

但是,pom.xml文件中添加的依赖jar包也不会自动下载到项目中,update Project也是一样,于是是网上查找了很多方法,尝试后都发现没有用,最终,查看自己的pom.xml文件,发现是在依赖前面写了<dependencyManagement>这个标签(下图),查资料后发觉这个标签的作用只是声明依赖,并不实现依赖的引入,因此,没有jar包的引入,maven项目就不会显示Maven Dependencies文件。去掉这个标签后,问题解决,maven Dependencies文件出现在maven项目中。

二、网上其他解决Maven Dependencies文件缺失的方法:

第1种:Maven支持没有打开:这种情况一般是Eclipse自带的Maven,或者自己装的Maven并没有打开服务。

解决方法:右键Maven项目-->Maven-->Enable Dependency Management

(可能有一些maven版本没有Enable Dependency Management这个选项

第2种:classpath文件问题或者.project文件问题:

解决方法:

(1)在.classpath文件中添加如下代码:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
		<attributes>
			<attribute name="maven.pomderived" value="true"/>
			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
		</attributes>
	</classpathentry>

(2)在.project文件的<natures>中添加下面这行语句:

<nature>org.eclipse.m2e.core.maven2Nature</nature>

	<natures>
		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
		<nature>org.eclipse.m2e.core.maven2Nature</nature>
		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
	</natures>

第3种:项目-->properties-->Deployment Assembly-->Add-->java build path Entries-->Maven Dependencies--Finish

第4种:项目为非maven项目(情况较少)

解决方法:右键项目-->configure-->Convert to Maven Project

 

三、dependencyManagement与dependencies的区别:

该部分转自博客:https://blog.csdn.net/liutengteng130/article/details/46991829

前面的出现问题主要是因为没有弄清楚dependencyManagement与dependencies的区别,因此这部分主要总结pom.xml文件中这两个标签的区别:

1、DepencyManagement的应用场景:

当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。

由于我们的模块很多,所以我们又抽象了一层,抽出一个itoo-base-parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。

在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

来看看我们项目中的应用:  pom继承关系图:

itoo-base-parent(pom.xml)

<dependencyManagement>
		
		<dependencies>
			<dependency>
				<groupId>org.eclipse.persistence</groupId>
				<artifactId>org.eclipse.persistence.jpa</artifactId>
				<version>${org.eclipse.persistence.jpa.version}</version>
				<scope>provided</scope>
			</dependency>
			
			<dependency>
				<groupId>javax</groupId>
				<artifactId>javaee-api</artifactId>
				<version>${javaee-api.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

itoo-base(pom.xml)

<!--继承父类-->
<parent>
		<artifactId>itoo-base-parent</artifactId>
		<groupId>com.tgb</groupId>
 
		<version>0.0.1-SNAPSHOT</version>
		<relativePath>../itoo-base-parent/pom.xml</relativePath>
	</parent>
		<modelVersion>4.0.0</modelVersion>
		<artifactId>itoo-base</artifactId>
		<packaging>ejb</packaging>
		
		<!--依赖关系-->
		<dependencies>
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-api</artifactId>
		</dependency>
		
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.eclipse.persistence</groupId>
			<artifactId>org.eclipse.persistence.jpa</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>
</project>

这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

2、Dependencies:

相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。

3、区别:

(1)dependencies : 自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。

(2)dependencyManagement : 这个标签里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

(3)dependencyManagement 中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外层的dependencies元素中没有指明版本信息时,dependencyManagement 中的 dependencies 元素才起作用。一个是项目依赖,一个是maven项目多模块情况时作依赖管理控制的。

 

 

  • 54
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论
### 回答1: "Java build path entries 为空" 的意思是指在 Java 项目的构建路径中没有任何条目或项目没有正确配置构建路径。 如果您在 Eclipse 等集成开发环境(IDE)中遇到此问题,您可以通过以下步骤解决此问题: 1. 右键单击项目,选择 "Properties"(属性)。 2. 选择 "Java Build Path"(Java 构建路径)选项卡。 3. 确保 "Source"(源码)选项卡中包含项目的源文件夹。 4. 确保 "Libraries"(库)选项卡中包含项目所需的所有库和 JAR 文件。 5. 如果缺少条目,请单击 "Add"(添加)按钮并添加缺少项目或库。 6. 单击 "OK"(确定)按钮以保存更改并关闭属性窗口。 这样应该就可以解决 "Java build path entries 为空" 的问题。 ### 回答2: Java Build Path Entries 为空的问题通常是由于项目的Build Path没有正确配置造成的。Java Build Path是用于设置项目编译和运行时的类路径、库以及其他资源的工具。如果Java Build Path Entries为空,说明项目没有正确配置Build Path,导致编译和运行出现问题。 下面是一些可能的解决方案: 1. 检查是否正确配置了Java Build Path。在Eclipse中,可以通过右键单击项目并选择“Properties”来打开“Properties”对话框,在“Java Build Path”选项卡中查看配置,确保所有路径和库都设置正确并存在。如果有必要,可以重新添加或编辑路径。 2. 检查项目的引用库是否正确。在Eclipse中,可以通过右键单击项目并选择“Properties”来打开“Properties”对话框,在“Java Build Path”选项卡的“Libraries”下查看引用库,确保所有库都正确地引用了,并且存在于项目路径中。 3. 清理项目并重新编译。有时候,代码库可能出现编译错误或其他问题。在这种情况下,清除项目并重新编译可能会解决问题。 4. 删除并重新导入项目。有时候,项目的配置可能损坏了或者导入了不正确的配置文件,此时可以先备份项目,然后删除项目并重新导入,新建并配置Build Path。 以上方法都是常见的解决Java Build Path Entries 为空的问题的方法,如果还有问题,请尝试更换IDE或者搜索相应的问题答案。 ### 回答3: Java Build Path Entries 为空,指在 Eclipse 中打开 Java 项目时,Java Build Path 报错,显示无任何 Entries 存在。这种情况一般是在创建或导入项目时出现,有可能是因为路径错误或者缺少某些文件或配置文件。 解决方法如下: 1. 检查项目配置文件:在项目根目录下找到 .classpath 文件,打开确认里面是否有正确的路径配置,比如是否正确导入了所需的 jar 包,是否有依赖库文件缺失等。 2. 新建项目,将源码导入新项目:如果源码备份完整,可以尝试新建项目,将源码导入新项目中。 3. 检查 Java 环境:检查是否有正确的 Java 环境变量,是否正确配置了 Java 路径。 4. 更新 Eclipse 版本:如果是 Eclipse 版本太旧,可以尝试更新到最新的版本,看看是否可以解决问题。 5. 重新导入项目:尝试删除当前项目,重新导入项目。 6. 安装对应插件:检查是否需要安装一些特定插件或升级 Java 开发软件。 7. 检查错误日志:可以查看 Eclipse 中的错误日志,寻找更详细的错误信息,以便更好地解决问题。 总之,Java Build Path Entries 为空这个情况可能是多种因素造成的,需要我们逐个排查,寻找问题所在,并及时解决,才能确保正常地开发、调试和运行 Java 项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张维鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值