• Java项目工程化之项目构建工具Maven


    欢迎查看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:mavenmavenhome
    epo(你的本地仓库地址)</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开发之上帝之眼系列教程其他文章

    勘误&感谢

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

  • 相关阅读:
    构造 BestCoder Round #52 (div.2) 1001 Victor and Machine
    multiset || 线段树 HDOJ 4302 Holedox Eating
    BFS(最短路) HDOJ 4308 Saving Princess claire_
    组合数专题
    余数专题
    数论 HDOJ 5407 CRB and Candies
    异或+构造 HDOJ 5416 CRB and Tree
    构造 HDOJ 5414 CRB and String
    背包DP HDOJ 5410 CRB and His Birthday
    博客贴自定义高亮代码
  • 原文地址:https://www.cnblogs.com/jimisun/p/9699182.html
Copyright © 2020-2023  润新知