为什么要将普通项目转换为maven项目
如何将普通项目转换为maven项目
转换过程中遇到的一些问题
你是否曾经被jar包冲突支配?
你是否有过一个jar包死活不知道该在哪里下载的苦恼?
你是否曾经在使用的jar包进行版本升级的时候束手无策?
你是否曾经在svn,git上面拉取项目的时候要同时拉取几百兆的依赖包而想骂娘?
你是否遇到过在项目打包上线时,
有些依赖需要打到jar包,有些不需要?
如果这些问题你碰到过一个或者多个,那么你就有必要把普通的项目转成maven项目.
对maven不太了解的,也可以参照我之前写过的博客了解maven基本用法,博客链接如下:
maven的使用和爬过的坑
接下来就以我之前学习编程,进行练习的测试项目举例:
idea的使用:
关于idea的使用,不太熟悉的童鞋可以参照我之前写过的博客,博客详细介绍了idea的安装使用和配置,博客链接如下:
IntelliJ IDEA操作总结
导入项目并新建pom.xml文件
项目本身的目录格式是这样的:
pom.xml文件标准格式如下 :
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>java-practice</groupId>
<artifactId>JavaPractice</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
按照maven项目目录格式创建目录结构
有以下两个关键目录:
Java类文件标准目录: src/main/java
把之前的代码移动到该目录下
在java目录下,鼠标右键
Mark Directory as -->Sources Root
资源文件(配置)标准目录: src/main/resources
资源配置文件移动到resouces目录下
在resouces目录下,鼠标右键
Mark Directory as -->Resources Root
导入项目依赖
这部分是重点:
在pom.xml导入相关jar包依赖:
有的童鞋可能要问了,我的项目依赖的jar包非常多,在lib上面有上百个(比如说我举例的这个项目),可以看到,非常多的依赖?
首先,你要对你自己使用的jar包和版本有一个最基本的了解,比如说我的项目里用了hadoop, 版本是2.7.1,为此,我引入了下面的依赖:
org.apache.hadoop
hadoop-common
2.7.1
如下图所示 :
可以看到, 这么简单的配置,就导入了好几十个jar包,
所以基本上你上百个jar包,几个依赖配置就搞定了
那么如果实在不知道该怎么导入某些jar包的依赖该怎么办呢?别慌
我随便找个jar包举例:
netty-3.7.0.Final.jar
用压缩工具打开任意一个jar包,进入它的META-INF目录,里面有一个maven文件夹,进入该文件夹,一直往里面点
最底层会有一个pom.xml文件,如下图所示:
打开这个pom.xml文件, 我们就能找到相应的配置啦!
把上图标注的几个关键的东西抄到自己的pom.xml里面,然后import changes,再去看我们的依赖:
可以看到, 修改过的pom.xml已经导入了这个jar包
必要的话,可以直接把他的爸爸抄过来,也就是上面的Parent里面的东西
接下来,如法炮制,把所有需要的依赖全部导入进来
对项目进行编译:
接下来执行mvn clean install 对项目进行编译
也可以使用mvn clean install -DskipTests跳过单元测试
在idea端操作方法如下图 :
如下图所示: 代表编译成功!
删除多余的目录:
打包编译成功之后,就可以把不必要的目录干掉了!
主要是bin目录和lib目录
最终的目录结构如下图所示,还是非常清爽的!
[ERROR] (请使用 -source 7 或更高版本以启用 diamond 运算符)
[ERROR] /E:/softWare/office/idea/myJob/JavaPractice/src/main/java/pers/xmr/java/liuyi/casedemo/util/DBUtil.java:[61,33] -source 1.5 中不支持 multi-catch 语句
[ERROR] (请使用 -source 7 或更高版本以启用 multi-catch 语句)
[ERROR] /E:/softWare/office/idea/myJob/JavaPractice/src/main/java/pers/xmr/test/Test.java:[13,32] -source 1.5 中不支持静态接口方法
[ERROR] (请使用 -source 8 或更高版本以启用静态接口方法)
[ERROR] /E:/softWare/office/idea/myJob/JavaPractice/src/main/java/pers/xmr/java/liuyi/DayTwentyOne.java:[13,39] -source 1.5 中不支持 diamond 运算符
[ERROR] (请使用 -source 7 或更高版本以启用 diamond 运算符)
[ERROR] /E:/softWare/office/idea/myJob/JavaPractice/src/main/java/pers/xmr/java/liuyi/DayEighteen.java:[56,47] -source 1.5 中不支持 diamond 运算符
报错原因 :
虽然我的jdk设置的是1.8
但是从报错来看明显是它是按照jdk1.5的语法识别的.
我的代码里用到了jdk7和jdk8的语法特性,
导致其无法识别而报错.
解决办法 :
网上找的办法基本上是在idea进行如下设置:
File-->Settings-->Build,Execution,Deployment-->Complier-->Java Compiler --> 把Project bytecode version设置为1.7或者更高版本
设置方法如下图:
但是这种方法并没有解决我的问题.
后面我想到了我刚刚使用maven的时候好像做过类似的配置来避免这个问题(记忆力实在太差~~)
在pom.xml文件里project标签下面添加如下配置,表示按照jdk8的语法规则来编译和打包
<buaild>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
加入了改配置之后,这个报错得到解决!
maven的使用还会碰到其他问题, 我在之前写的博客里有涉及到我遇到的一些问题:
感兴趣的可以参考,博客链接如下:
maven遇到的问题总结