第一章:JAVA项目工程化之项目构建工具maven

简介: 欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。

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

什么是项目构建工具?

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

Java项目构建工具有哪些?

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

Maven的主要功能?

  • 依赖管理
  • 规范目录结构
  • 完整的项目构建阶段
  • 支持多种插件

来了解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即可生效

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

勘误&感谢

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

目录
相关文章
|
2月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
228 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
1月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
92 23
|
2月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
184 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
2月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
130 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
2月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
129 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
2月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
141 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
2月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
116 7
|
4月前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
1426 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
3月前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
93 6
|
3月前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
121 6

热门文章

最新文章

推荐镜像

更多