欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。使Java的各种后端技术在你心中模块化;让你在工作中能将Java各个技术了然于心;能够即插即用。本章我们来一起了解项目构建工具Maven。

 

什么是项目构建工具?

在进行编程操作的时候,我们常常会遇到很多与编程无关的项目管理工作,如下载依赖、编译源码、单元测试、项目部署等操作。一般的,小型项目我们可以手动实现这些操作,然而大型项目这些工作则相对复杂。构建工具是帮助我们实现一系列项目管理、测试和部署操作的工具。

Java项目构建工具有哪些?

对于Java项目的构建工具;传统构建工具有Ant,主流构建工具:Maven,新兴构建工具:Gradle

Maven构建项目的生命周期有哪些?

  • validate:验证项目以及相关信息是否正确
  • compile:编译源代码和相关资源文件
  • test:对测试代码进行测试
  • package:根据不同的项目类型进行打包
  • verigy:验证打包的正确性
  • install:将打包好的包安装到本地
  • deploy:将打包好的包发布到远程

Maven的主要功能?

  1. 依赖管理
  2. 规范目录结构
  3. 完整的项目构建阶段
  4. 支持多种插件

来了解一下Maven配置文件pom.xml

 Maven所有配置都在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>com.jimisun</groupId>
<artifactId>learnmaven</artifactId>
<version>1.0-SNAPSHOT</version> <!--项目打包方式-->
<packaging>war</packaging> <!--定义全局属性-->
<properties>
<spring.version>4.1.1.RELEASE</spring.version>
</properties> <!--管理依赖-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies> <!--管理配置或定制插件-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build> </project>

Maven强大功能:管理依赖

Maven通过坐标groupId:artifactId:version来标识一个唯一的二进制版本,一个Maven工程如果添加某个依赖只需要查找这个依赖的坐标即可,开发中常用查询依赖网址http://mvnrepository.com/

    <!--管理依赖-->
<dependencies>
<!--添加Spring-Context的依赖-->
<dependency>
<!--标识组织-->
<groupId>org.springframework</groupId>
<!--标识项目-->
<artifactId>spring-context</artifactId>
<!--标志版本-->
<version>4.1.1.RELEASE</version>
</dependency>
</dependencies>

PS:通过parent可以实现pom文件继承父类完成统一配置管理,可以使用<dependencyManagement></dependencyManagement>和<pluginManagement></pluginManagement>统一依赖和插件,不同于<dependencies>和<plugins>的是,如果子类pom没有声明<dependency>和<plugin>不生效!

Maven其他功能:规范目录结构

在一个maven项目中,一个标准的web项目结构如下

项目的结构是支持自定义的,但是不要这么做,别人看到自定义的项目结构会产生歧义,构建标准的目录结构有利于项目构建的标准化。如果需要自定义项目结构,可以在pom中这样配置。

 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warSourceDirectory>WebContent/</warSourceDirectory>
</configuration>
</plugin>
</plugins>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
<testSourceDirectory>test/java</testSourceDirectory>
<testResources>
<testResource>
<directory>test/resources</directory>
</testResource>
</testResources>
<directory>build</directory>
</build>
java代码目录移动到./src
配置文件目录移动到resources
测试代码目录移动到./test/java
测试配置文件移动到./test/resources
webapp根目录移动到WebContent
编译目录改变成./build

Maven扩展功能:支持多插件

  • maven-compiler-plugin:源码编译插件

  • maven-source-plugin:源码发布插件,绑定compile阶段 执行jar goal,将源码以jar包形式发布出去
  • maven-javadoc-plugin:javadoc插件,将源码的javadoc发布出去
  • maven-tomcat7-plugin:直接使用tomcat运行项目,mvn tomcat7:run
  • maven-shade-plugin:常用打包插件,绑定在package阶段,执行shade goal,将源码和依赖在一起独立运行
  • maven-assesmbly-plugin:和shade相似,打包插件,支持tar,zip,gz
  • maven-gpg-plugin:jar包的签名插件,针对自己发布的jar包签名

Maven其他常用配置

配置本地Maven仓库:在maven的conf目录的settings.xml的settings标签中增加下面一行

<localRepository>E:\maven\mavenhome\repo(你的本地仓库地址)</localRepository>

配置Maven镜像远程仓库(阿里):在maven的conf目录的settings.xml的mirrors标签中增加下面代码

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

根据不同环境打包不同配置文件到项目(有示例代码点击此处查看完整示例代码

<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<resource.dir>resource/dev</resource.dir>
</properties>
</profile>
<profile>
<id>prod</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<resource.dir>resource/prod</resource.dir>
</properties>
</profile>
</profiles> <build>
<resources>
<resource>
<directory>${resource.dir}</directory>
</resource>
<resource>
<directory>resources</directory>
</resource>
</resources>
</build>
如此,就分为dev和prod两个环境,对应每一种环境其资源文件路径不一样,在使用MVM时,使用-P指定profile即可生效

Maven命令大全(后面将会整理出比较细系统和全面的Maven命令大全)

https://www.cnblogs.com/wkrbky/p/6352188.html

 Java开发之上帝之眼系列教程其他文章

勘误&感谢

  本系列文章资料来源很多出自于互联网和在下本身的见解,受限于个人技术能力水平和其他相关知识的限制,相关见解错误或者资料引用错误请各位帮助留言校正!引用资料多来自于互联网,在下在引用前会遵循各位前辈或者博主的引用说明表示感谢,但互联网资料多是转发再转发或存在遗漏请原作者内信联系指正。

Java项目工程化之项目构建工具Maven的更多相关文章

  1. 项目管理及自动构建工具Maven

    项目管理及自动构建工具Maven 一.Maven安装.目录结构.cmd命令1.下载安装apache-maven-3.2.3-bin.zip下载:http://maven.apache.org/down ...

  2. 项目管理构建工具——Maven(基础篇)

    项目管理构建工具--Maven(基础篇) 在前面的内容中我们学习了JDBC并且接触到了jar包概念 在后面我们的实际开发中会接触到很多jar包,jar包的导入需要到互联网上进行就会导致操作繁琐 Mav ...

  3. 项目管理构建工具——Maven(高阶篇)

    项目管理构建工具--Maven(高阶篇) 我们在之前的文章中已经基本了解了Maven,但也仅仅只止步于了解 Maven作为我们项目管理构建的常用工具,具备许多功能,在这篇文章中我们来仔细介绍 分模块开 ...

  4. 着重基础之—构建工具—Maven的依赖管理

    着重基础之—构建工具—Maven的依赖管理 项目构建利器Maven给我们开发人员带来了极大的便利,从繁琐的jar包管理中脱身的程序员终于可以有时间再进入另一个坑了. 我今天要给大家分享的内容是我在实际 ...

  5. 构建工具maven

     构建工具maven  =UTF-8''Gradle Effective Implementation Guide.pdf: http://www.t00y.com/file/76854506 b ...

  6. java项目构建工具Maven

    一.java-maven常用命令 mvn archetype:create 创建Maven项目 mvn compile 编译源代码 mvn deploy 发布项目 mvn test-compile 编 ...

  7. 项目构建工具maven的使用方法

    最近在开发javaweb项目中有用到maven,以前并不是很了解,于是学习了一些相关内容,记之共享. 本篇内容在Windows环境下实施,JDK版本使用的1.7.0_79. 一.maven是什么? 简 ...

  8. tox python项目虚拟环境管理自动化测试&&构建工具

    tox 是一个方便的工具,可以帮助我们管理python 的虚拟环境,同时可以进行项目自动测试以及构建 tox 如何工作的 说明 从上图我们也可以看出如何在我们项目中使用tox 参考资料 https:/ ...

  9. 自动化构建工具maven

    Maven是目前最流行的自动化构建工具,对于生产环境下多框架.多模块整合开发有重要作用.Maven 是一款在大型项目开发过程中不可或缺的重要工具. 一.什么是构建? 构建并不是创建,创建一个工程并不等 ...

随机推荐

  1. (二)使用预定义模型 QStringListModel例子

    使用预定义模型 QStringListModel例子 源代码如下 Main.cpp #include <QApplication> #include "teamleadersdi ...

  2. 关于B/S和C/S模式

    B/S注重的是 1.服务想玩游戏的时候,就出现想看电影的时候,就出现不用下载客户端太麻烦看个电影还要下载一大堆东西,不看了 2.维护升级软件不用一台一台地重新更新,百度一直在更新,但是我们感觉不到 3 ...

  3. Spring Boot 官方文档学习(一)入门及使用

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  4. Sublime Text3打造U盘便携Lua IDE

    下载Sublime Text  链接http://www.sublimetext.com/3 我下载的是win32 portable 版 便于放入U盘携带 解压 注冊: 能够复制下面部分直接贴入注冊栏 ...

  5. 【Java面试题】3 Java的"=="和equals方法究竟有什么区别?简单解释,很清楚

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的 ...

  6. Java 基本概念:jvm、jdk、jre、jse

    jvm 是java虚拟机,将java的class字节码文件翻译成二进制可执行程序.jdk 是java的开发包 Javasdk, java的开发工具,包含SUN公司提供的javaAPI,将java源码编 ...

  7. 桥接模式(bridge pattern)-------结构型模式

    桥接模式是一种对象结构型模式,其将抽象部分和它的实现部分分离,使它们都可以独立的变化,又称为柄体(Handle and Body)模式或接口(Interface)模式. 优点: 1.分离抽象接口及其实 ...

  8. DM8168 PWM驱动与測试程序

    昨天把DM8168的Timer设置给摸了一遍,为写PWM的底层驱动做好了准备,如今就要进入主题了. dm8168_pwm.c: #include <linux/module.h> #inc ...

  9. mybatis由浅入深day01_8输出映射_8.1resultType输出类型(8.1.1输出简单类型_8.1.2输出pojo对象和pojo列表_8.1.3输出hashmap)

    8 输出映射 8.1 resultType(输出类型) 使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全 ...

  10. oracle扩展dblink数。

    [标记]在进行数据迁移时:出现 Compilation errors for PROCEDURE ZDGAME.GFF_FETCH_MZR_LOG Error: ORA-04052: error oc ...