IDEA项目突然提示找不到符号或程序包不存在
今天也遇到同样的问题,搞了好久。
最后发现终端运行:mvn idea:idea
“将ide构建/运行的操作委托给maven”
勾选了下面这个对号就什么问题都没有了
Maven简介
Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
Maven安装
JDK要求:1.7+
Maven要求版本:3.5+
Maven 自身安装需要大约 10 MB 空间。除此之外,额外的磁盘空间将用于你的本地 Maven 仓库。你本地仓库的大小取决于使用情况,但预期至少 500 MB
Maven使用
Idea中使用Maven
a)Idea中Maven配置
File–>Settings–>搜索Maven
Maven home directory
maven解压后的目录
User settings file
maven配置文件
Local repository
本地仓库地址
Work offline
是否启用离线模式
b)打开/创建maven项目
创建maven项目时,可以选择对应的骨架
c)依赖包引入
当Maven项目初始化,或者pom.xml有改动时,需要重新将依赖包引入,有以下的方式
d)Maven生命周期管理
Validate 校验
Compile 编译
Test 测试
Package 打包
Install 将打好的包上传到本地maven仓库
Deploy 将打好的包上传到远程maven仓库
闪电表明是否忽略测试
命令使用Maven
maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下。
-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;
-P 指定 Profile 配置,可以用于区分环境;
-e 显示maven运行出错的信息;
-o 离线执行命令,即不去远程仓库更新包;
-X 显示maven允许的debug信息;
-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。
maven 打包:mvn package
编译源代码: mvn compile
安装项目到本地仓库:mvn install
完整示例:
mvn deploy -Dmaven.test.skip=true
Maven配置
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
3.
4. <!-- 模型版本。 -->
5. <modelVersion>4.0.0</modelVersion>
6.
7. <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->
8. <groupId>com.winner.trade</groupId>
9.
10. <!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
11. <artifactId>trade-core</artifactId>
12.
13. <!-- 本项目目前所处的版本号 -->
14. <version>1.0.0-SNAPSHOT</version>
15.
16. <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
17. <packaging>jar</packaging>
18.
19. <!-- 定义本项目的依赖关系 -->
20. <dependencies>
21.
22. <!-- 每个dependency都对应这一个jar包 -->
23. <dependency>
24.
25. <!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),-->
26. <!--就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->
27. <groupId>com.winner.trade</groupId>
28. <artifactId>trade-test</artifactId>
29. <version>1.0.0-SNAPSHOT</version>
30.
31. <!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。 -->
32. <!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->
33. <scope>test</scope>
34.
35. <!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 -->
36. <optional>false</optional>
37.
38. <!-- 屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->
39. <exclusions>
40. <exclusion>
41. <groupId>org.slf4j</groupId>
42. <artifactId>slf4j-api</artifactId>
43. </exclusion>
44. </exclusions>
45.
46. </dependency>
47.
48. </dependencies>
49.
50. <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->
51. <properties>
52. <file.encoding>UTF-8</file.encoding>
53. <java.source.version>1.5</java.source.version>
54. <java.target.version>1.5</java.target.version>
55. </properties>
56.
57. ...
58. </project>
Maven常用命令
clean:删除项目中已经编译好的信息,删除target目录
compile:Maven工程的编译命令,用于编译项目的源代码,将src/main/java下的文件编译成class文件输出到target目录下。
test:使用合适的单元测试框架运行测试。
package:将编译好的代码打包成可分发的格式,如JAR,WAR。
install:安装包至本地仓库,以备本地的其它项目作为依赖使用。
deploy:复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)。
每一个构建项目的命令都对应了maven底层一个插件。
Maven常见问题总结
-
Maven jar包下载不下来
a. 检查settings.xml中的镜像仓库地址,如果是内网地址则用vpn访问公司内网重新下载
b. 检查是否开启了离线模式
c. 检查依赖包是否在远程仓库中存在 -
.lastUpdate解决
出现.lastUpdated结尾的文件的原因:由于网络原因没有将Maven的依赖下载完整导致,需要删除所有以.lastUpdate结尾的文件,
新建 cleanLastUpdated.bat
@echo off
rem create by NettQun
rem 这里写你的仓库路径
set REPOSITORY_PATH=E:\hsaRep
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
echo %%i
del /s /q "%%i"
)
rem 搜索完毕
pause