JavaEE——从零开始上手Maven项目

一、为什么使用Maven

你是否遇到过下面的这些情况:

  1. 使用一个框架(如spring),需要依赖的jar包太多太杂,每次要找到整理好保存在磁盘中的jar包文件夹,把所有jar导进项目。
  2. 在IDE中因为缺失jar包或版本问题,各种小红叹号
  3. 导入别人的项目,又是各种小红叹号
  4. 好不容易百度解决了叹号,运行时tomcat又出现问题
  5. 正常运行后,回头想看一下代码,猛一看"乱七八糟",它的配置文件扔到哪里了…

而Maven的出现,主要就是为了解决这些问题。所说的Maven项目,就是用Maven这一工具,来管理我们的项目。而Maven的作用由重要程度可以总结为以下三个方面:

  • 依赖(jar包)管理
    Maven有一个仓库的概念,下面会有介绍。在一个Maven工程中,我们不用手动的管理jar包,只需要写一下配置文件(pom.xml),Maven就会通过这个仓库,给我们整理依赖、下载jar包、导入jar包。

  • 清晰的目录结构
    Maven不仅给我们管理jar包,而对于一个Maven工程,它有一套约定俗成的目录结构,就好比我们所有的开发程序员,都商量好各种文件要怎么放置、放在什么位置。这样来看,方便了我们阅读别人的程序,而且也避免了在不同IDE下导致的各种各样的路径问题。Maven的目录结构如下:
    在这里插入图片描述

  • 跨平台
    不管是windows还是linux,只要安装的maven,拿到一个maven项目,都可以成功搭建或是部署(maven集成了tomcat,甚至没有安装tomcat也可以运行项目)

二、Maven仓库

上面提到Maven对jar包的管理是通过仓库来实现的,很容易理解,Maven有一个jar包的仓库,项目中需要什么jar包或者需要哪个版本的jar包,就和Maven说,Maven从仓库中找到这些jar包并导入到项目中。Maven涉及到的仓库分为三种,本地仓库、远程仓库、中央仓库。

  • 本地仓库
    本地仓库即在你本地电脑中,maven维护的一个仓库(文件夹)。这个仓库一开始肯定什么都没有,当你在项目配置文件中(pom.xml)配置你所需要的jar包时,maven会根据需求,从远程仓库或中央仓库下载相应的jar包到本地仓库,再从本地仓库导入到项目中。自然,当下载过一次后,下一次你需要这个同样的jar包,maven就可以直接从本地仓库导入。
  • 远程仓库
    maven默认没有配置远程仓库,远程仓库是为了加快jar包下载的速度,一般在学校、公司内部维护的一个私有仓库。下文没有提及配置远程仓库的方法。
  • 中央仓库
    中央仓库网址为http://mvnrepository.com/, 即maven官方或其他第三方(如阿里)维护的一个十分全的大仓库,基本覆盖了我们日常所需的所有jar包。因从maven官方下载速度慢,下文在maven安装中会将中央仓库改为阿里的仓库(建议改),阿里仓库网址:https://maven.aliyun.com。

三、Maven的安装配置

更改本地仓库路径、中央仓库

在Maven解压目录下的conf文件夹中的settings.xml为maven的基本配置文件。打开settings.xml,在标签下添加配置本地仓库的存放目录,即所有jar包都存放在这个目录下,若不配置,默认为用户目录下的.m2/repository

<localRepository>本地仓库存放目录</localRepository>

在< mirrors >标签下添加以下内容,更改Maven的中央仓库为阿里仓库

<mirror>
	<id>alimaven</id>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>       
</mirror>

四、常用的Maven命令

当我们拿到一个maven项目,在项目目录下即可通过maven命令来实现编译、运行等操作,常用的maven命令如下:

  • mvn clean清理编译后的文件(target文件)
  • mvn compile 编译main下的代码
  • mvn test-compile 编译test下的代码
  • mvn test 运行test的代码
  • package 打包
    java项目–>jar包
    web项目–>war包
    由项目中pom.xml 配置war
  • install 发布项目到本地仓库,用在打jar包上,打成jar包可以被其他项目使用
  • tomcat:run 使用tomcat运行

注意,以上的命令按顺序依次为compile、test-compile、test、package、install、tomcat:run,执行后面的会一并把前面的执行

五、依赖的作用域

前面也提到,在pom.xml可以配置项目需要的jar包,(具体怎么配置,在下面的demo中有涉及),但对于一些jar包,根据在不同的场景下,是可以有不同的打包策略的。

比如servlet相关的一些jar包,我们在开发测试环境下,编译阶段是需要的,而在运行阶段,用到的是tomcat中的相关的包,无需项目自带,因此是不用打包的。

再比如单元测试相关的包,如junit的包,仅是测试时使用,项目的编译、运行都用不到这些包。

而maven为我们提供了四中打包策略(即jar包的作用域),总结如下

1、maven-assembly-plugin 打包所有依赖

 <plugin>
       <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        <archive>
            <manifest>
                <mainClass></mainClass>
            </manifest>
         </archive>
       </configuration>
       <executions>
         <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
               <goal>single</goal>
            </goals>
         </execution>
       </executions>
   </plugin>
2、 maven-jar-plugin 打包 不包含依赖 同时 exclude可以排除一些文件
<plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <exclude>*.properties</exclude>
                        <exclude>*.txt</exclude>
                    </excludes>
                </configuration>
</plugin>
3、org.apache.maven.plugins 跳过测试环节
<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
</plugin>
4、maven-war-plugin 打成war包 同时排除一些文件
<plugin>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/lib/*.jar,WEB-INF/classes/**</packagingExcludes>
                </configuration>
</plugin>

六、写一个maven+ssm 核心文件配置

  1. 创建Maven项目
  2. pom.xml(Maven的核心)
    pom.xml中就是我们项目需要的依赖或是插件的配置,需要的jar包都写在这里面,下面整理了ssm框架最基本的一些jar包,复制进pom.xml即可
<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>cn.ssm</groupId>
	<artifactId>SSM</artifactId>
	<packaging>war</packaging><!-- 打成war包 -->
	<version>0.0.1-SNAPSHOT</version>

	<properties>
		<!-- 依赖版本、配置 -->
		<spring.version>4.1.7.RELEASE</spring.version>
		<mybatis.version>3.5.3</mybatis.version>
		<mybatis-spring.version>1.3.2</mybatis-spring.version>
		<mysql-connector.version>5.1.40</mysql-connector.version>
		<junit.version>4.9</junit.version>
		<c3p0.version>0.9.5</c3p0.version>
		<servlet-api.version>3.1.0</servlet-api.version>
		<slf4j.version>1.7.5</slf4j.version>
		<lombok.version>1.18.10</lombok.version>
		<jackson-databind.version>2.5.4</jackson-databind.version>
		<!-- 插件版本、配置 -->
		<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
		<tomcat7-maven-plugin.version>2.2</tomcat7-maven-plugin.version>
		<jdk.version>1.8</jdk.version>
		<encoding>utf-8</encoding>
	</properties>

	<dependencies>
		<!-- 一、spring相关依赖 -->
		<!-- 1.1 spring核心 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 1.2 spring dao层 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 1.3 spring web层 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 二、mybatis与数据库相关依赖 -->
		<!-- 2.1 mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<!-- 2.2 spring mybatis整合 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>${mybatis-spring.version}</version>
		</dependency>
		<!-- 2.3 mysql驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql-connector.version}</version>
		</dependency>
		<!-- 2.4 c3p0连接池 -->
		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>${c3p0.version}</version>
		</dependency>
		<!-- 三、servlet相关依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${servlet-api.version}</version>
			<scope>provided</scope>
		</dependency>
		<!-- 四、单元测试junit+spring-test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 五、日志slf4j 使用log4j12实现 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		
		<!-- 六、其他工具 -->
		<!--   6.1 对象与json的转换 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson-databind.version}</version>
		</dependency>
		<!--   6.2 lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>${lombok.version}</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
		<!-- 编译插件 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven-compiler-plugin.version}</version>
				<configuration>
					<source>${jdk.version}</source>
					<target>${jdk.version}</target>
					<encoding>${encoding}</encoding>
				</configuration>
			</plugin>
			<!-- tomcat插件 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>${tomcat7-maven-plugin.version}</version>
				<!--控制tomcat端口号 -->
				<configuration>
					<port>8081</port>
					<path>/</path>
					<uriEncoding>${encoding}</uriEncoding>
					<finalName>SSM</finalName>
				</configuration>
				<!-- <configuration> 热部署配置 <url>http://localhost:8080/manager/text</url> 
					<username>sirm</username> <password>123</password> </configuration> -->
			</plugin>
		</plugins>
		<!-- 打包后的名字 -->
		<finalName>SSM</finalName>
	</build>
</project>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Geek Li

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

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

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

打赏作者

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

抵扣说明:

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

余额充值