Java开发工具篇

Maven

每一个 Maven 工程都有一个 pom.xml 文件,位于根目录中,包含项目构建生命周期的详细信息。通过 pom.xml 文件,我们可以定义项目的坐标、项目依赖、项目信息、插件信息等等配置。

对于开发者来说,Maven 的主要作用主要有 3 个:

  • 项目构建:提供标准的、跨平台的自动化项目构建方式。
  • 依赖管理:方便快捷的管理项目依赖的资源(jar 包),避免资源间的版本冲突问题。
  • 统一开发结构:提供标准的、统一的项目结构。

Maven 项目生命周期与构建原理及相关命令?

Maven从项目的三个不同的角度,定义了单套生命周期,三套生命周期是相互独立的,它们之间不会相互影响。

  • 默认构建生命周期(Default Lifeclyle): 该生命周期表示这项目的构建过程,定义了一个项目的构建要经过的不同的阶段。
  • 清理生命周期(Clean Lifecycle): 该生命周期负责清理项目中的多余信息,保持项目资源和代码的整洁性。一般拿来清空directory(即一般的target)目录下的文件。
  • 站点管理生命周期(Site Lifecycle) :向我们创建一个项目时,我们有时候需要提供一个站点,来介绍这个项目的信息,如项目介绍,项目进度状态、项目组成成员,版本控制信息,项目javadoc索引信息等等。站点管理生命周期定义了站点管理过程的各个阶段。
    在这里插入图片描述
  • Maven构建命令使用mvn开头,后面添加功能参数,可是一次执行多个命令,使用空格分隔
  • 当然,需要注意的是,当你在命令行窗口中使用mvn命令时,必须进入到pom文件的上一级目录中
 - mvn compile   	#编译
 - mvn clean   		#清理
 - mvn test   		#测试
 - mvn package   	#打包
 - mvn install   	#安装到本地仓库

maven基础概念

项目中依赖的第三方库以及插件可统称为构件。每一个构件都可以使用 Maven 坐标唯一标识,坐标元素包括:

  • groupId(必须): 定义了当前 Maven 项目隶属的组织或公司。groupId 一般分为多段,通常情况下,第一段为域,第二段为公司名称。域又分为 org、com、cn 等,其中 org 为非营利组织,com 为商业组织,cn 表示中国。以 apache 开源社区的 tomcat 项目为例,这个项目的 groupId 是 org.apache,它的域是 org(因为 tomcat 是非营利项目),公司名称是 apache,artifactId 是 tomcat。
  • artifactId(必须):定义了当前 Maven 项目的名称,项目的唯一的标识符,对应项目根目录的名称。
  • version(必须):定义了 Maven 项目当前所处版本。
  • packaging(可选):定义了 Maven 项目的打包方式(比如 jar,war…),默认使用 jar
  • classifier(可选):常用于区分从同一 POM 构建的具有不同内容的构件,可以是任意的字符串,附加在版本号之后。只要你提供正确的坐标,就能从 Maven 仓库中找到相应的构件供我们使用。

https://mvnrepository.com/

仓库:用于存储资源,包含各种jar包。仓库分为本地仓库和远程仓库
坐标:使用唯一的标识,通过改标识可以下载对应的资源

Pom.xml


<project>
    <dependencies>
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <type>...</type>
            <scope>...</scope>
            <optional>...</optional>
            <exclusions>
                <exclusion>
                  <groupId>...</groupId>
                  <artifactId>...</artifactId>
                </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
</project>
- dependencies:一个 pom.xml 文件中只能存在一个这样的标签,是用来管理依赖的总标签。
- dependency:包含在 dependencies 标签中,可以有多个,每一个表示项目的一个依赖。
- type(可选):依赖的类型,对应于项目坐标定义的 
- packaging。大部分情况下,该元素不必声明,其默认值是 jar。
- optional(可选):标记依赖是否可选
- exclusions(可选):用来排除传递性依赖,例如 jar 包冲突
- scope(可选):依赖的范围,默认值是 compile。

依赖范围

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。

Maven中包的依赖原则?如何解决冲突?

依赖原则?

  • 依赖路径最短优先原则

A -> B -> C -> X(1.0)
A -> D -> X(2.0)

由于 X(2.0) 路径最短,所以使用 X(2.0)。

  • 声明顺序优先原则

A -> B -> X(1.0)
A -> C -> X(2.0)

在 POM 中最先声明的优先,上面的两个依赖如果先声明 B,那么最后使用 X(1.0)。

  • 覆写优先原则
    -子 POM 内声明的依赖优先于父 POM 中声明的依赖。

如何解决冲突?

  • 找到 Maven 加载的 Jar 包版本,使用 mvn dependency:tree 查看依赖树,根据依赖原则来调整依赖在 POM 文件的声明顺序。

  • 发现了冲突的包之后,剩下的就是选择一个合适版本的包留下,如果是传递依赖的包正确,那么把显示依赖的包exclude掉。如果是某一个传递依赖的包有问题,那么我们需要手动把这个传递依赖execlude掉

排除依赖
   		<exclusions>
   				<exclusion>主动断开依赖引用</exclusion>
   		</exclusions>
   

可选依赖
    		<optional>true隐藏该依赖的引用</optional>
   	

聚合

分模块开发与设计,将一个项目分成多个maven项目模块,由主模块统一管理

  • 作用:聚合用于快速构建maven项目工程,一次性管理多个模块。
  • 方法:新建一个maven模块,只留下pom文件,在pom文件里面将其打包类型设置为pom。
  • 如何由主模块去管理其他所有模块:
    • 注意:参与聚合操作的模块最终执行的先后顺序与模块间的依赖关系有关,与配置顺序无关
<!-- 定义该工程用于进行构建管理 -->
<packaging>pom</packaging>
<!-- 管理工程模块列表 -->
<module>模块名(地址)</module>
			<!-- 具体工程模块名称 -->
            <module>模块名(地址)</module>
            <module>模块名(地址)</module>
  </modules>

继承

通过继承可以是在在子模块(工程)中使用父模块中的依赖配置(与Java继承类似)

<parent>
       <groupId></groupId>
       <artifactId></artifactId>
       <version></version>
       //前面三个与父模块中的坐标相同
       <relativePath>父模块的pom文件的地址</relativePath>
      
</parent>

  ** <relativePath>** 的作用是为了找到父级工程的pom.xml;默认值是../pom.xml。
  Maven首先在构建当前项目的地方寻找父项 目的pom,
  其次在文件系统的这个位置(relativePath位置),
  然后在本地仓库,最后在远程仓库寻找父项目的pom。   

属性

1、自定义属性:
作用:等同于Java中的变量,方便统一管理重复代码(例如:多个依赖的版本号一致时,当需要全部改变时则只需要修改变量)

 <properties>
           <spring.version> 5.1.9.RELEASE</spring.version>
 </properties>

        调用格式:${变量名}    

2、内置属性:
作用:使用maven的内置属性,快速配置
调用格式:${version} ${basedir}等

3、Setting属性:
作用:使用maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:${settings.localRepository}

4、Java系统属性:
作用:读取Java系统属性
调用格式:${user.home}

5、环境变量属性:
作用:读取环境变量属性
调用格式:${env.JAVA_HOME}

资源配置:
配置资源文件:


        <!--配置资源文件对应的信息-->
        <resources>
              <resource>
                    <!--设定配置文件对应的位置目录,支持使用属性动态设定路径-->
                    <directory>地址</directory>
                    <!--开启对配置文件的资源加载过滤-->
                    <filtering>true</filtering>
              </resource>
        </resources>

指定 Maven 编译器插件

默认情况下,Maven 使用 Java5 编译我们的项目。要使用不同的 JDK 版本,请在 pom.xml 文件中配置 Maven 编译器插件。例如,如果你想要使用 Java8 来编译你的项目,你可以在标签下添加以下的代码片段:


<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

这样,Maven 就会使用 Java8 的编译器来编译你的项目。如果你想要使用其他版本的 JDK,你只需要修改和标签的值即可。例如,如果你想要使用 Java11,你可以将它们的值改为 11。

多环境开发配置

Maven 配置文件允许我们配置不同环境的构建设置,例如开发、测试和生产。在 pom.xml 文件中定义配置文件并使用命令行参数激活它们:

<profiles>
  <profile>
    <id>development</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <environment>dev</environment>
    </properties>
  </profile>
  <profile>
    <id>production</id>
    <properties>
      <environment>prod</environment>
    </properties>
  </profile>
</profiles>

执行命令:mvn clean install -P production

跳过测试的三种方式

当你不得不进行测试时,但部分模块仍未开发完毕:此时不得不选择跳过测试
在这里插入图片描述
或者:
执行命令:mvn install/package -D skipTests
当然你也可以:
在这里插入图片描述

配置maven私服nexus

1.本地开发机器上安装nexus
本地搭建了一个nexus私服,即可以使用公司nexus私服仓库中的依赖,也可以上传和使用自己的测试包依赖。
nexus下载地址:

2.搭建私服作用:

原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。还有就是公司有自己的jar可以发布到私服上等等。

此文章测试搭建的是本地开发机器上安装nexus,无论是本地还是公司私服的搭建,都是一样的。
!

![在a](https://img-blog.csdnimg.cn/9633a92a31fc42c294854b63ad057b25.png)

在这里插入图片描述
本地访问私服:
在本地仓库中配置访问服务器权限,用户名,密码
在这里插入图片描述
配置镜像:
在这里插入图片描述
注意:
本地仓库的setting需和本机安装的maven里面的setting内容保持一致

IDEA访问私服和组件上传

在pom中编写“发布配置管理”
在这里插入图片描述
执行命令:
mvn deploy
在这里插入图片描述

Git

git 常用命令

#! /bin/bash命令修改文件
在这里插入图片描述

查看所有的远程仓关联情况

创建远程仓库及别名

在这里插入图片描述

git remote -v
>> 
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)

要使用Git连接到远程仓库,可以按照以下步骤进行操作:

首先,在本地创建一个新的文件夹来存放项目。打开命令行工具(如Terminal或Command Prompt)并导航到该文件夹所在位置。

初始化Git仓库。运行以下命令将当前文件夹转换为Git仓库:git init

添加远程仓库URL。通过运行以下命令将远程仓库与本地仓库关联起来:git remote add origin <remote_repository_url>,其中 <remote_repository_url> 是远程仓库的URL。

确认已成功连接到远程仓库。运行 git remote -v 命令查看已经配置好的远程仓库列表。

现在就可以使用常规的Git命令对远程仓库进行操作了,比如拉取最新更改、提交修改等。

注意事项:

需要安装并正确设置Git才能完成上述操作。

若要克隆现有的远程仓库而不是直接连接到现有的仓库,则应使用 git clone <remote_repository_url> 命令。

Git中5个区,和具体操作?

  • 代码提交和同步代码
    在这里插入图片描述
  • 代码撤销和撤销同步
    在这里插入图片描述

平时是怎么提交代码的?

注意
git创建分支提示fatal: not a valid object name: ‘master‘

  • 先使用git status可以发现提示我们还未进行过commit提交,根据提示可以解决该问题:
    执行完git init后,创建一个新文件,然后执行git add .命令,然后执行一遍git commit -m ""命令,此时masterd分支被成功创建,此时再使用git branch创建新的分支即可。
  • 在本地使用 git init初始化一个空的git项目后,想使用git branch创建分支时,提示fatal: not a valid object name: ‘master’。

这个错误通常表示未找到名为 “master” 的有效提交对象,因为当前仓库还没有进行过任何提交。

在初始化一个全新的本地仓库后,首先需要通过执行至少一次提交来创建初始的提交对象,然后才能创建新的分支

  • 第零步: 工作区与仓库保持一致
    使用git checkout -b <new-branch-name>命令创建一个新分支并切换到它。例如:
    • 创建&查看&切换分支
git  branch	 	+branch_name
git  branch 		-v
git  checkout	 	+branch_name
  • 第一步: 文件增删改,变为已修改状态
  • 第二步: git add ,变为已暂存状态
git status
git add --all # 当前项目下的所有更改
git add .  # 当前目录下的所有更改
git add xx/xx.py xx/xx2.py  # 添加某几个文件
  • 第三步: git commit,变为已提交状态
git commit -m "<这里写commit的描述>"
  • 第四步: git push,变为已推送状态
git push -u origin master # 第一次需要关联上
git push # 之后再推送就不用指明应该推送的远程分支了
git branch # 可以查看本地仓库的分支
git branch -a # 可以查看本地仓库和本地远程仓库(远程仓库的本地镜像)的所有分支

在某个分支下,我最常用的操作如下

git status
git add -a
git status
git commit -m 'message'
git pull --rebase
git push origin xxbranch

合并分支

注意分支前需要回到master主分支

git  merge	 +branch_name

合并冲突
发生合并冲突时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git 无法替我们决定使用哪一个,必须人为决定使用的的更新的版本代码内容。

查看所有远程仓库及其URL
这将列出所有远程仓库及其对应的fetch和push的URL。通常origin是默认的远程仓库名称,用于你克隆的远程仓库。

git remote -v

Docker

  • Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上。
  • Docker是直接运行在宿主操作系统之上的一个容器,每个容器会有自己的权限管理,同一台宿主机上可以友好的共存多个容器。Docker借助Linux的内核特性,如:控制组(Control Group)、命名空间(Namespace)等,并直接调用操作系统的系统调用接口。

Docker和虚拟机的区别?
Docker容器复杂度更低、启动更快、资源占用更小。
在这里插入图片描述

Docker基础概念

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 客户端(Client) : Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。

Docker 主机(Host) :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。Docker 包括三个基本概念:

  • 镜像(Image):就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

Docker常见镜像相关操作?

# 查找镜像
docker search mysql

# 拉取镜像
docker pull mysql

# 删除镜像
docker rmi hello-world

# 更新镜像
docker commit -m="update test" -a="pdai" 0a1556ca3c27  pdai/ubuntu:v1.0.1

# 生成镜像
docker build -t pdai/ubuntu:v2.0.1 .

# 镜像标签
docker tag a733d5a264b5 pdai/ubuntu:v3.0.1

# 镜像导出
docker save > pdai-ubuntu-v2.0.2.tar 57544a04cd1a

# 镜像导入
docker load < pdai-ubuntu-v2.0.2.tar

Docker常见容器相关操作?

# docker 开机自启
systemctl enable docker
# 容器查看
docker ps -a

# 容器启动
docker run -it pdai/ubuntu:v2.0.1 /bin/bash

# 容器停止
docker stop f5332ebce695

# 容器再启动
docker start f5332ebce695

# 容器重启
docker restart f5332ebce695

# 容器导出
docker export f5332ebce695 > ubuntu-pdai-v2.tar

# 容器导入
docker import ubuntu-pdai-v2.tar pdai/ubuntu:v2.0.2

# 容器强制停止并删除
docker rm -f f5332ebce695

# 容器清理
docker container prune

# 容器别名操作
docker run -itd --name pdai-ubuntu-202 pdai/ubuntu:v2.0.2 /bin/bash

# 实例 rabbitmq
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management
# 实例 rabbitmq  设置为docker重启后自动运行
docker update rabbitmq --restart=always

卸载docker

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装Docker -CE

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
$ sudo yum -y install docker-ce docker-ce-cli containerd.io   

配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ke9h1pt4.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看Docker容器的日志?

#例:实时查看docker容器名为user-uat的最后10行日志
docker logs -f -t --tail 10 user-uat

#例:查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2018-02-08" --tail=100 user-uat

#例:查看最近30分钟的日志:
docker logs --since 30m user-uat

#例:查看某时间之后的日志:
docker logs -t --since="2018-02-08T13:23:37" user-uat

#例:查看某时间段日志:
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" user-uat

#例:将错误日志写入文件:
docker logs -f -t --since="2018-02-18" user-uat | grep error >> logs_error.txt

启动Docker容器?

docker run -itd pdai/ubuntu:v2.0.1 /bin/bash
  • -it 可以连写的,表示 -i -t
  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互
  • -d: 后台模式

进入Docker后台模式

第一种:docker attach containerId

使用docker attach进入后,exit便容器也停止了。

第二种:docker exec

docker exec -it f5332ebce695 /bin/bash
推荐使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

IDEA

IDEA常用插件集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值