一、项目构建
平时我们是怎么构建项目的,项目怎么运行起来呢?
idea帮我们编译。
我们依靠点击构建项目
一切设置好以后,使用工具(idea)帮我们打包。
项目构建中有几个关键注意的点?
1、jdk啥版本
2、哪些文件夹是干啥用的!! 源文件?配置文件?测试文件?在哪里?
3、如果是web工程,web.xml放哪里?
4、编译文件,编译后的文件放在哪里。
5、打包,打包成什么文件
(0)聊一下idea的项目结构
Project Structure
"项目结构"对话框允许您管理项目和IDE级别的元素,例如 Modules,Facets,Libraries, Artifacts和
SDK。
打开方式有两种
1、通过工具栏
2、通过快捷键
Ctrl + Shift + Alt + S
(1)Project选项
指定项目名称,SDK,语言级别和编译器输出路径。
- Project name:项目名,使用此字段编辑项目名称。
- Project SDK:项目SDK,选择项目SDK。如果所需SDK不在列表中,请单击“ New”,然后选择所需的SDK类型。然后,在打开的对话框中,选择SDK主目录,然后单击确定。要查看或编辑所选SDK的名称和内容,请单击"Edit"。(SDK页面将打开)
- Project language level:选择要支持的Java语言级别。选定的级别将被用作项目默认值。
- Project compiler output:项目编译器输出,指定IntelliJ IDEA将存储编译结果的路径。单击选择路径对话框中browseButton 的目录。
指定目录中的两个子目录将被创建:
production为生产代码。
test为测试来源。
在这些子目录中,将为每个模块创建单独的输出目录。输出路径可以在模块级重新定义。
(2)Modules 选项
指定项目名称,SDK,语言级别和编译器输出路径。
- Name:项目名称
- Sources:这里对Module的开发目录进行文件夹分类,就是说这个module里有什么内容,说明了不同性质的内容放在哪里。(注意,这些不同内容的标记代表了一个标准Java工程的各项内容,IntelliJ就是根据这些标记来识别一个Java工程的各项内容的,比如,它会用 javac 去编译标记为Sources的源码,打包的时候会把标记为Resources的资源拷贝到jar包中,并且忽略标记为Exluded的内容。左边显示的是在选中内容的预览。)
- Paths:为模块配置编译器输出路径,还可以指定与模块关联的外部JavaDocs和外部注释的位置。
- Dependencies:在此选项卡上,您可以定义模块SDK并形成模块依赖关系列表。
(3)Sources选项
Sources:源代码存放的文件,蓝色。
Tests:设置测试代码存放的文件件,绿色。
Resources:一般对应着Sources文件,一般放配置文件,如:db.properties。
Test Resources:这个对应着Tests文件夹,存放着Tests代码的配置文件。
Excluded:设置配出编译检查的文件,例如我们在project模块设置的out文件夹。
(4)Paths
-
Compiler output:编译输出路径。
-
Inherit project compile output path:继承项目编译输出路径 选择此选项以使用为项目指定的路径。即上面在Project选项中设置的out文件路径。
-
Use module compile output path:使用模块编译输出路径。
Output path:编译输出路径。
Test output path:测试代码编译输出路径。
Exclude output paths: 排除输出路径,选中此复选框可以排除输出目录。
-
JavaDoc:使用可用控件组合与模块关联的外部JavaDocs存储位置的列表。
-
External Annotations:外部注释。使用 和 管理与模块关联的外部注释的位置(目录)列表。
(5)Dependencies
在此选项卡上,您可以定义模块SDK并形成模块依赖关系列表。
-
Module SDK:模块SDK,选择模块SDK。
(要将项目SDK与模块相关联,请选择Project SDK。请注意,如果稍后更改了项目SDK,模块SDK
将相应更改。如果所需SDK不在列表中,请单击“ 新建”,然后选择所需的SDK类型。然后,在打开的对话框中,
选择SDK主目录,然后单击确定。要查看或编辑所选SDK的名称和内容,请单击编辑。(SDK页面将打开。) -
依赖列表
-
相关性存储格式,选择用于存储依赖关系的格式(作为IntelliJ IDEA模块或Eclipse项目)。该选项对使用不同开发工具的团队有帮助。
(6)Libraries
在此选项卡上,您可以定义模块SDK并形成模块依赖关系列表。
首先,可以创建一个新的项目库,可以设置分类。
可以添加本地jar包,网络来源的jar包,删除jar包。
(7)Facets
表示这个 module 有什么特征,比如 Web,Spring 和 Hibernate 等;
(8)Artifacts
-
Artifact 是 maven 中的一个概念,表示某个 module 要如何打包,例如 war exploded、war、jar 等等这种打包形式;一个 module 有了 Artifacts 就可以部署到应用服务器中了
-
在给项目配置 Artifacts 的时候有好多个 type 的选项,exploed 是什么意思?explode 在这里你可以理解为展开,不压缩的意思。也就是 war、jar 等产出物没压缩前的目录结构。
-
建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来。
-
默认情况下,IDEA 的 Modules 和 Artifacts 的 output 目录 已经设置好了,不需要更改。
-
打成 war 包 的时候会自动在 WEB-INF 目录 下生产 classes 目录 ,然后把编译后的文件放进去。
(9)SDKS
系统开发工具 ,全局 SDK 配置 。
(10)Global libraries
全局类库,可以配置一些常用的类库。
(11)Problems
问题,在项目异常的时候很有用,可以根据提示进行项目修复(FIXED)。
二、Maven概述
以上的工作,需要我们自行构建,而且idea和eclipse,甚至一些其他的开发工具构建的时候是不一样的。
那么有没有一种统一的方式,甚至无需手动点击,通过配置就可以了,通过使用命令就能就行构建呢?
当然我们看到了我们的idea其实也是通过之文件来记录构建信息的,那么既然构建如此重要,形成一套规范化的,统一的便捷的构建工具就势在必行,于是出现了maven ,当然还有gradle ,他们的功能异常强大。
有什么好处?
- 统一管理jar包,自动导入jar及其依赖。
- 项目移植之后甚至不需要安装开发工具,只需要maven加命令就能跑起来,降低学习成本。
- 使我们的项目流水线成为可能,因为使用简单的命令我们就能完成项目的编译,打包,发布等工作,就让程序操作程序成为了可能,大名鼎鼎的 jekins 技能做到这一点。
1、Maven下载安装
下载地址:http://maven.apache.org/
小知识点: 作为一个java程序员 apache 网站的规律得知道都是 项目名.apache.org
- http://maven.apache.org/
- http://tomcat.apache.org/
- http://dubbo.apache.org/
- http://hadoop.apache.org/
Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。
安装以及配置环境变量,学过点java的都会
- 解压
- 配置MAVEN_HOME
- 配置path,%MAVEN_HOME%\bin
- cmd执行 mvn -v ,出现以下界面,成功
2、maven核心配置文件
(1)配置路径
打开settings.xml文件
<!-- 本地仓库位置 -->
<localRepository>D:\green\maven_repository</localRepository>
(2)配置阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
(3)配置全局编译jdk版本
<!-- java版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
3、常常鲜,体验
maven标准目录
src
|--main
|--java 源代码目录
|--resources 资源目录
|--test
|--java 测试代码目录
|--resources 测试资源目录
|--target
|--classes 编译后的class文件目录
|--test-classes 编译后的测试class文件目录
pom.xml 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>
<artifactId>test</artifactId>
<groupId>org.xinzhi</groupId>
<version>1.0-SNAPSHOT</version>
</project>
写个Hello.java
public class Hello{
public static void main(String args[]){
System.out.println("Hello maven!");
}
}
可以再resources 文件夹下新建db.properties 配置文件,或随便帮一个文件;
执行,以下命令,可能会从网上下载内容,是在下载插件,不要担心。
mvn compile
结果,并生成target目录
结果发现我们编译的class文件和resources中的配置文件都放在了一起
执行 mvn package
观察target中已经有了我们打包好的jar包
观察名字是不是我们项目的名字加版本号,当然此jar包无法运行,应为maven也不知道你的main方法在哪里。
4、Maven生命周期
maven生命周期其实就是描述了一个项目从源代码到部署的整个周期
Maven有三个内置的生命周期:默认(default),清洁(clean)和站点(site)。
- 清洁(clean) 为执行以下工作做必要的清理。就是我们经常做的,删除target文件夹。
- 默认(default) 真正进行项目编译打包等工作的阶段。
- 站点(site) 生成项目报告,站点,发布站点。
默认(default)的生命周期包括以下阶段(该阶段经过简化,实际上更加复杂):
- 验证(validate) - 验证项目是否正确,所有必要的信息可用。
- 编译(compile) - 编译项目的源代码。
- 测试(test) - 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署。
- 打包(package)- 采用编译的代码,并以其可分配格式(如JAR)进行打包。
- 验证(verify) - 对集成测试的结果执行任何检查,以确保满足质量标准。
- 安装(install) - 将软件包安装到本地存储库中,用作本地其他项目的依赖项。
- 部署(deploy) - 在构建环境中完成,将最终的包复制到远程存储库以与其他开发人员和项目共享(私服)。
mvn install
此命令在执行安装之前按顺序(验证(validate),编译(compile),打包(package)等)执行每个默认生命周期阶段。在这种情况下,您只需要调用最后一个构建阶段来执行,安装(install)。
在构建环境中,使用以下调用将工件清理地构建并部署到共享存储库中。
mvn clean deploy
相同的命令可以在多模块场景(即具有一个或多个子项目的项目)中使用。Maven遍历每个子项目并执行清洁(clean),然后执行部署(deploy)(包括所有之前的构建阶段步骤)。
注意:在我们开发阶段,有一些生命周期的阶段,比如验证(validate)这些,基本很少用到。只要使用关键的几个基本能满足需求。
5、Maven 常用命令
下面maven比较常见的一些命令。
命令 | 说明 |
---|---|
mvn –version | 显示版本信息 |
mvn clean | 清理项目生产的临时文件,一般是模块下的target目录 |
mvn compile | 编译源代码,一般编译模块下的src/main/java目录 |
mvn package | 项目打包工具,会在模块下的target目录生成jar或war等文件 |
mvn test | 测试命令,或执行src/test/java/下junit的测试用例 |
mvn install | 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用 |
mvn deploy | 将打包的文件发布到远程参考,提供其他人员进行下载依赖 |
mvn site | 生成项目相关信息的网站 |
mvn dependency:tree | 打印出项目的整个依赖树 |
mvn archetype:generate | 创建Maven的普通java项目 |
mvn tomcat:run | 在tomcat容器中运行web应用 |
6、Maven的版本规范(本人自己的项目)
Maven使用如下几个要素来定位一个项目,因此它们又称为项目的坐标。
- groudId 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名开头。一般对应着JAVA的包的结构,例如org.apache。
- artifactId 单独项目的唯一标识符。比如我们的tomcat, commons等。不要在artifactId中包含点号(.)。
- version 项目的版本。
- packaging 项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。
Maven在版本管理时候可以使用几个特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如"1.0-SNAPSHOT"。各个部分的含义和处理逻辑如下说明:
- SNAPSHOT 这个版本一般用于开发过程中,表示不稳定的版本。
- LATEST 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个时间最后。
- RELEASE 指最后一个发布版。
7、在idea中配置maven
把画红线的东西全部配置成自己的。最后一个是仓库,在你的其他盘找一个地方新建repository文件夹,自己要知道,选中,如果勾选不了就选择都选override。
如果不选择仓库会把jar包下载至C盘的下边目录,不好维护,还占用c盘空间。当然idea和maven可能会有bug。
两处都要配置,一个是当前项目的maven配置,一个是新建项目的maven配置。
三、Maven依赖(重点)
maven管理依赖也就是jar包厉害之处是不用我们自己下载,会从一些地方自动下载