IDEA+MAVEN:踩坑指南

简介: IDEA+MAVEN:踩坑指南个人感觉很多网上的Maven教程都容易忽略一些基础操作,所以也准备把网上一些容易一笔带过的地方详细写一写。0. 为什么要用 Maven ?

IDEA+MAVEN:踩坑指南


个人感觉很多网上的Maven教程都容易忽略一些基础操作,所以也准备把网上一些容易一笔带过的地方详细写一写。

0. 为什么要用 Maven ?

这个问题绝大多数教材和教程都会写,但是恐怕对于大多数初学者来说 Maven 带来的麻烦还要多于便利。尤其是写算法题的经验让大家都习惯了直接 import 完事的良好体验,就算要用第三方的包从 IDEA 里点两下鼠标就解决了,额外去写一个 pom,还要考虑各种名称、版本号实属多此一举。


真正让我意识到 Maven 便利性的是一次处理 json 文件的经历。因为要将一堆字符串导出为一个 json 文档,所以当时用了 json-lib 这个包。下载下来 import 进去结果用不了,编译不通过,马上意识到是依赖包的问题,结果查了一下发现…有 6 个依赖包!但是头铁的我还是不用 Maven,决定自己下载这 6 个包,结果下载下来还是不行,气急败坏。最后发现是版本问题,json-lib 依赖包的版本不是最新版本,需要把这 6 个包都找到对应版本才可以。到此,再头铁也得承认 Maven 对于这种情况有着莫大的帮助,毕竟只需要简单添加一个依赖(甚至都不需要手动下载),就可以解决上面所有的问题。


更重要的是,学习 Java 框架基本上都依赖于 Maven,不管是 SSM 还是简单的 Junit,没有 Maven 的话都会很繁琐,所以不论从哪个方面来讲 Maven 都是必经之路。

1. Maven 安装

首先,IDEA是内置有Maven的,一般来讲可以直接使用,如果要额外安装的话也没有问题,从官方网站( https://maven.apache.org/ )下载即可。具体安装方式和环境变量配置可以直接搜索“Maven 安装”,一般都会有详细的教程。


如果额外安装了 Maven,那么在 IDEA 创建 Maven 项目时可以选择任意一个进行创建:


这里额外说一下版本的问题。我在使用过程中碰到的一个问题是 Maven 报错无法导入:


首先介绍一下 IDEA 怎么打开 log。点击菜单栏“Help”—“Show Log in Explorer”会打开一个“log”文件夹,再打开“idea.log”文件即可:


之后可以在 log 文档中看到具体的错误信息。


在这个问题中我们可以在 log 中找到下列信息:


1.No implementation for org.apache.maven.model.path.PathTranslator was bound.

whilelocatingorg.apache.maven.model.path.PathTranslatorforfieldatorg.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.pathTranslator(UnknownSource)atorg.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)


2.No implementation for org.apache.maven.model.path.UrlNormalizer was bound.

while locating org.apache.maven.model.path.UrlNormalizer

forfieldatorg.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.urlNormalizer(UnknownSource)atorg.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)


2 errors

java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector, see the following errors:

  1. No implementation for org.apache.maven.model.path.PathTranslator was bound.while locating org.apache.maven.model.path.PathTranslatorfor field at org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.pathTranslator(UnknownSource)atorg.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)


  2.No implementation for org.apache.maven.model.path.UrlNormalizer was bound.

whilelocatingorg.apache.maven.model.path.UrlNormalizerforfieldatorg.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.urlNormalizer(UnknownSource)atorg.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)


这个问题主要是 IDEA 和 Maven 版本冲突带来的。Maven 从 3.6.2 版本开始不再使用 Plexus 而是使用 JSP 330 注释,而 IDEA 与之出现了兼容性问题。主要有两个解决方式:


使用早期的 Maven。3.6.1 及以前的版本均可。

升级到最新的 IDEA。从 IDEA 2019.2.3 版本开始这一问题得到了修复,可以正常使用。

2. Maven 创建项目

直接从 IDEA 当中创建 Maven 项目相当的方便,在新建项目页面中选择 Maven 即可,同时,勾选“Create from archetype”即可自动使用模板:


之后的步骤十分简单,需要注意的是,创建过程中常会出现下面这个问题,即出现“Generating project in Batch mode”信息然后一直没有反应:


这个问题一般是因为创建项目时需要从网络上下载一个 archetype-catalog.xml 文件,如果网络情况不理想很容易卡在这一步。这一问题可以通过调整 archetypeCatalog 参数来解决。这一参数可以为 internal,local,remote:


internal:读取maven-archetype-plugin内置的 archetype-catalog.xml 文件;

local:读取本地文件,位置为~/.m2/archetype-catalog.xml;

remote:默认,指向Maven中央仓库的Catalog。

因此,一个简单的方法就是在创建过程中点击“Properties”最右侧的加号,加入 archetypeCatalog=internal 这一项:


这样一般创建过程就不会有问题了。

3. Maven 使用

在我刚刚开始学习 Maven 的时候,其实对它的功能是很懵懂的。当时我的第一反应是,既然 Maven 是进行包管理的,那是不是不用写 import 了?答案当然是否定的,该写还是得写,但这并不妨碍 Maven 主要用于包管理这个事实。Maven 最主要的功能在于自动化地解决依赖问题,也就是说只要你写清楚你需要什么包,那么 Maven 可以自动把这个包准备好,同时也会把所有的依赖包准备好,而不需要自己手动下载再一个一个添加。


但遇到的下一个问题就是在 pom 文件中添加了依赖,可是并没有什么反应,IDEA 反而会把它标红。这是因为对应的包在本地仓内找不到,而为了充分发挥 Maven 自动化的优势,避免手动下载,我们需要调整 IDEA 的设置,依次点击“File”—“Settings”,之后在 Maven 选项卡中找到“Importing”一项,勾选“Import Maven projects automatically”即可:


这样,使用过程就变得异常简单,找到需要的包的相关信息(建议直接从 Maven 仓库中复制),把依赖项添加进 pom,之后稍等片刻就会发现字体颜色自动变成了正常,而查看本地仓就会发现相应的包已经被下载了下来,也可以直接在项目中使用了。


那么这里顺便展开一下 Maven 本地仓库的路径问题。一般来讲,本地仓库的地址默认为${user.home}/.m2/repository,这个 user.home 在 Windows 下一般就是 C 盘 Users 文件夹中以自己登录的那个用户名命名的文件夹。那么在这个文件夹下 jar 包是怎么存储的呢?下面是一个例子:


// pom 文件中的dependency


org.junit.jupiter

junit-jupiter-api

5.6.0

test

// 实际地址

c:\Users\MyName.m2\repository\org\junit\jupiter\junit-jupiter-api\5.6.0\junit-jupiter-api-5.6.0.jar

可以看到,从 Maven 的 dependency 标签内容到实际地址主要依据下列转化步骤:


处理 groupId,每一个 . 转化为一级文件夹。比如‘org.junit.jupiter’,就是首先在repository 文件夹下创建一个 org 文件夹(已有的话不用创建),然后在 org 文件夹下创建 junit 文件夹,在 junit 文件夹下创建 jupiter 文件夹;

再下一级创建以 artifactId 命名的文件夹,即在 jupiter 文件夹下创建 junit-jupiter-api 文件夹;

创建版本号文件夹;

把 artifactId 和 version 用连字符连接(如果有 classifier 也要连接),然后加上扩展名,就是实际文件的地址。

显然,整个过程相当繁琐,而且但凡一步出错那么 Maven 就无法读取这个依赖。所以,尽管可以通过手工方式将依赖下载到本地仓库再添加到 pom 文件中,但除非情况特殊,否则非常非常非常不推荐这种做法,还是推荐使用 IDEA 自动导入依赖。


目录
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
3月前
|
Java Maven
解决idea每次新建maven项目都需要重新配置maven的问题
解决idea每次新建maven项目都需要重新配置maven的问题
156 1
|
1月前
|
Java Maven Kotlin
idea maven创建kotlin项目
本文介绍了在IntelliJ IDEA中使用Maven创建Kotlin项目的步骤,包括在`pom.xml`文件中添加Maven中央仓库、配置`kotlin-maven-plugin`插件、指定源目录、添加测试插件和执行插件,以及添加Kotlin测试依赖和标准库依赖。文中还提到了如何通过更换镜像或使用代理来解决依赖下载速度慢的问题,并展示了运行示例代码的截图。
81 4
idea maven创建kotlin项目
|
22天前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
35 1
|
1月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
323 1
|
1月前
|
Java Linux Maven
IDEA如何用maven打包(界面和命令两种方式)
【10月更文挑战第14天】本文介绍了两种Maven项目打包方法:命令行与IDEA界面。首先确保已安装Maven并配置环境变量,通过`mvn -v`检查安装。命令行打包需进入项目目录,执行`mvn package`,之后在`target`目录查看结果。IDEA打包则需配置Maven路径,打开Maven Projects窗口,双击Lifecycle下的`package`阶段,同样在`target`目录查找生成文件,并在Build窗口查看日志以排查问题。
663 1
|
1月前
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
168 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
1月前
|
Java 应用服务中间件 Maven
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
168 0
idea+maven+tomcat+spring 创建一个jsp项目
|
1月前
|
Java Maven
震惊!idea专业版如何配置maven国内源手把手教学
文章提供了如何在IDEA专业版中配置Maven使用国内源(如阿里云)的详细步骤,以加快依赖下载速度,并解释了配置国内源的原因。
453 0
震惊!idea专业版如何配置maven国内源手把手教学
|
2月前
|
XML Java Maven
idea配置maven步骤及常见问题
本文介绍了在IDEA中配置Maven的详细步骤,包括Maven的下载、系统环境变量的配置、Maven本地仓库的设置、镜像加速的配置,以及在IDEA中指定Maven路径和配置文件。同时,还提供了解决每次新建项目需要重新手动配置Maven问题的方法。
idea配置maven步骤及常见问题