Eclipse下maven使用的常见问题及scope详解


prtyaa
prtyaa 2023-12-30 21:22:52 60587 赞同 0 反对 0
分类: 资源
前言 在Eclipse下使用Maven,着实有些不足之处,以至于经常有人问到Maven相关的问题,故此在这里做个总结,以便大家查阅。有的涉及原理的东西,也一一讲解,这样能举一反三。

怎么创建Maven项目

eclipse支持maven项目的创建,如果你希望不要等待那么久,直接跳过架构选择即可,但是你需要清晰地知道Maven的项目结构,他应该是这个样子:

Eclipse中的Maven项目对

文件夹的结构解析是自动的,对应的关系如上图。 如果你创建的项目的结构不是如此,可以手动添加对应文件夹,Eclipse可以自动识别。注意所有文件夹的创建都应该在src下。当然,SpringBoot的web内容是直接仿到resouces下面的,那是SpringBoot内置的对静态资源的处理。

如何设置JDK版本

很多人发现创建完的Eclipse的Maven项目,在Project Facts中看到的Java的版本居然是1.5这个上古时代的版本,实际上我们只需要在Maven中添加这么一段代码就可以了:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

项目菜单中的Update Project是什么原理

Eclipse实际上对Maven的支持并不算完备,其中一个特点就是Eclipse仍按照自己的方式来管理Maven项目,当我们修改了POM配置后,Maven并不能自动读取理解。而且Eclipse会尝试通过POM配置自动匹配一些Eclipse内置配置,比如尝试为web项目自动添加webService的支持等。 修改pom后,单击项目右键选择Maven->Update Project的功能就是读取POM配置并使用Eclipse的方式来更新项目的配置。比如,上面的修改Java版本的代码改动后,你就应该执行这个操作: 简单说来,所有pom文件的更新,如果没有及时反馈到Eclipse的项目属性中,你都可以执行这个菜单,快捷键为alt+ F5。

从哪里搜索依赖,如何选择版本

原来的maven.aliyun.com是可以搜索包的,但是现在只能作为库使用了。搜索库,最佳去处,自然是mvnrepository.com/,搜索后直接复制pom就可以了。

关于版本选择问题,一方面要考虑版本之间的冲突,这是第一原则。其次,如果有多个版本可选(比如日志框架),那么选择下载次数最多的基本不会错,如下图

什么时候需要设置scope

scope是对dependency的管理措施,scope的可用值有下面几个:

1、 compile 这是默认的scope,表示在运行,打包,测试几个声明周期中,对应的jar包都是存在可用的,最典型的是如果你设置了某个dependency的scope不为compile,则你会发现打包后war文件中没有对应的jar包。

2、 system 这个scope可以用来引用maven库无法下载的包,比如你公司自己的jar包,如果没有maven私服,这是一个快捷的解决办法,典型的例子是谷歌的验证码插件:

<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
大家可以尝试后发现提示无法直接下载,解决的办法是mvnrepository.com/中搜索到对应版本后找到jar包下载,然后放到项目的某个文件夹中,用下面的代码实现引用:
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/kaptcha-2.3.2.jar</systemPath>
</dependency>

3、provided provided表示将来的运行环境会提供该jar包,它在编辑代码时段,maven打包阶段都可用,但不会打包到结果中,比如tomcat自带的包,比如servlet-api,可以这样写:

<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>

这样就不用使用eclipse的方式也就是添加对tomcat运行时的build path了。

1、 test 表示引用的jar包仅在测试类中有效,比如下面的两张图说明了这个问题 :Eclipse认识不同的作用域。

当然test scope的jar包也不会被打包到结果包中,比如war中。

5、runtime 这个作用域用来表示该jar包仅在运行时可用,及在编译打包期间不需要,与compiler相比,仅跳过编译步骤。

Maven的源设置及本地仓库设置

本地仓库,默认存放缓存位置是在C盘,C盘是多么重要的地盘,maven依赖不小哇,动不动就是几个G,所以还是将其转移吧,代码参考下面的讲述。 使用aliyun的maven源仍然是最快的,设置的办法有两种,一个是修改eclipse的maven设置中的settings.xml:

an>
<?xml version="1.0" encoding="UTF-8"?><settings xmlns="maven.apache.org/SETTIN"
xmlns:xsi="w3.org/2001/XMLSchema-i"
xsi:schemaLocation="maven.apache.org/SETTIN maven.apache.org/xsd/se">
<localRepository>D:\mavenrepo</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>maven.aliyun.com/nexus/</url>
</mirror>
</mirrors> </settings>
一个是在pom中添加源设置(pom的根节点下):
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>maven.aliyun.com/nexus/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL3
粉丝 1 资源 1949 + 关注 私信
最近热门资源
麒麟系统版本介绍白皮书  518
MiSans 阿拉伯语字体文件  462
解决新版本麒麟系统中微信打开白屏显示  402
麒麟系统进行系统监控,查看进程的运行时间来优化性能  334
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!)  226
统信桌面专业版添加字体  219
统信uos单一程序黑屏,任务栏正常显示解决办法  218
统信uos快捷键文档  189
统信系统双无线网卡设置关闭开启单一网卡  146
分享一个磁盘恢复工具,适用于多平台(包括统信)  124
最近下载排行榜
麒麟系统版本介绍白皮书 0
MiSans 阿拉伯语字体文件 0
解决新版本麒麟系统中微信打开白屏显示 0
麒麟系统进行系统监控,查看进程的运行时间来优化性能 0
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!) 0
统信桌面专业版添加字体 0
统信uos单一程序黑屏,任务栏正常显示解决办法 0
统信uos快捷键文档 0
统信系统双无线网卡设置关闭开启单一网卡 0
分享一个磁盘恢复工具,适用于多平台(包括统信) 0
作者收入月榜
1

prtyaa 收益399.62元

2

zlj141319 收益236.11元

3

IT-feng 收益219.61元

4

1843880570 收益214.2元

5

风晓 收益208.24元

6

哆啦漫漫喵 收益204.5元

7

777 收益173.07元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!