【编程通用工具】

maven

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
  <pluginGroups>
  </pluginGroups>
  </proxies>
  </servers>
  <mirrors>
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
  </mirrors>
  <profiles>
  </profiles>
</settings>

Maven in 5 Minutes
我是在windows环境里做的实验,在mvn package的时候报错了,这有可能是因为我没有配置JAVA_HOME,因为jdk8会给你自动配置一个C:\Program Files (x86)\Common Files\Oracle\Java\javapath放在path里,这样是不行的,要配置JAVA_HOME


maven(一) maven到底是个啥玩意~
把create换成generate


Maven 教程

maven 基本配置

Scala and Maven
Maven的setting文件,一个在MVN_HOME/conf/setting.xml,如果USER_HOME/.m2/setting.xml存在,那么就优先读取这个

maven全局配置文件settings.xml详解

Profiles就是个性配置,感觉最重要的就是repositories 和pluginRepositories,可以设置多个repositories 和pluginRepositories,如果某个包在第一个里面没找到就去第二个里面找
Profiles就是个性配置,里面可以有好多个profile,每个profile里都可以有各种各样的配置参数,比如下面的例子就是有一个profile,这个profile的名字叫做nexus,
activeprofiles和activation是用来激活某个profile的,我猜Activation是放在profile中的一个参数,下面的例子里用了activeprofiles表示,nexus这个profile被激活,里面的配置参数被启用

<settings>
  <offline>false</offline>
<!-- 下面是代理设置,可以有多个 -->
  <proxies>
    <proxy>
      <id>web http</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>my.proxy.com</host>
      <port>1234</port>
      <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
    </proxy>
  </proxies>
  <profiles>
    <profile>
      <id>nexus</id>
      <repositories>
        <!-- 各种仓库,从上往下依次读取,第一个仓库没有就去第二个仓库找,我猜的 -->
		<repository>
          <id>central</id>
          <url>http://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>my-central</id>
          <url>http://my.maven.com/private</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
	  <!-- 插件的仓库,写法和前面的一样 -->
		<pluginRepository>
          <id>central</id>
          <url>http://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>		
        <pluginRepository>
          <id>my-central</id>
          <url>http://my.maven.com/private</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>

Maven镜像地址大全,Maven镜像地址配置示例
Maven:mirror和repository 区别

maven pom设置

Maven:repositories、distributionManagement、pluginRepositories中repository的区别
setting.xml的mirror、mirrorOf和pom.xml的repositories、repository的关系关联*
个人觉得一个好的习惯是在pom里指定repository,尽量少在setting里设置repository,保证项目之间互不干扰。

maven 模块管理配置

dependencyManagement与dependencies区别
关于maven自动处理版本冲突的原则和调整依赖的方法
What is the difference between “pom” type dependency with scope “import” and without “import”?
type为pom只能用在dependencyManagement,功能就相当于把另一个工程的dependencies放进了本工程的dependencyManagement里,省的自己再在dependencyManagement写一大堆了,在之后的dependencies标签里就可以不写版本了。

type

maven依赖中如何理解<type>pom/jar/…</type>、<scope>compile/import…</scope>等?

  • 需要先理解package:取值一般是pom、jar,默认是jar,如果当前工程是jar的话,使用mvn package会输出一个jar包;如果是pom,那么只会认为这个pom文件记录了一些依赖,使用mvn package并不会输出jar包,举个例子,你可以看你Maven仓库的下面这个工程,他是一个这个工程的package就是个pom,含义是,这个pom只是记录了本mvn工程引入了各种引入的坐标,但并不会作为一个完整的jar包使用;
<groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
  • 然后理解<type>pom</type>:需要在<dependencyManagement><scope>import</scope>一起使用,如果需要依赖一个package必须也得是pom的父工程,那就一定要指定类型为pom ;意为本工程只需要父工程的pom文件里记录的坐标放进本工程的dependencyManagement,供本工程的子工程使用,而并不需要依赖这个父工程本身的jar包或者代码;
    举个例子,现在在<dependencyManagement>里有spring-boot-dependencies这个工程,类型为jar,那么子工程在dependencies如果使用了这个spring-boot-dependencies,那么子工程会将这个坐标作为一个jar来看,但这是没有意义的,因为这个spring-boot-dependencies本身不会产生一个jar包。而且此时打mvn package就会报错;
    说白了,在dependencyManagement里,类型是jar,就是说即需要父工程的pom作为子工程的参照,也需要这个工程的jar包(也就是代码);类型是pom,就是说只需要父工程的pom作为子工程的参照

scope

When would I need maven dependency with runtime scope
scope指的是引入jar包的生效范围。诚然,在pom里写scope为runtime的包,改为compile也能用,但区分runtime和compile更多是为了规范性。mysql-connector-java为例,他的scope一般为runtime,在开发过程中使用的接口都是jdk的类,因为如果scope为runtime,代码里是无法引入与使用mysql-connector-java里的类的(编译报错),因为这个包的生效范围最多只到runtime。
(这个类之所以在运行是可用,是因为java的spi机制,甚至你手动用class加载也是能加载的,但编译期就是无法使用)

Maven的Scope区别笔记
讲一下runtime,一般这种类库都是接口与实现相分离的类库,这句话很重要,例如mysql的jdbc库,是java提供了接口,然后mysql去实现了这个接口。你可以看到在用jdbc链接mysql的库的时候,引入的包都是java内置的接口类,并没有mysql-connector-java,它是通过类加载器加载进去的,因此,mysql-connector-java这个包里的具体实现类是在运行期使用的,在编译器没有被使用。因此在pom里它是runtime

optional

Maven optional关键字透彻图解

build/resources

Maven项目中resources配置总结
maven Resources标签的使用
resouces标签作用:在打包成jar的时候,控制resouces文件夹里的资源文件,被放在哪里,默认情况下,resouces文件夹里的内容会被放在jar里的目录里,
在这里插入图片描述

下面resouces配置,会将resouces的输出目录移动至上一层,而既然移动到上一层,这个xml配置就不会被放进jar里,而是放在了target/class/…/conf(从文件内容来看,jar等同于target/classes)
在这里插入图片描述
另注:他和maven-assembly可共存,毕竟一个输出jar,一个是输出合并打包文件。
maven的filters目录详解

lifecycle与Goal

Maven生命周期(clean+site+default)
Maven 构建生命周期
Maven插件(plugin)
mvn install、package都是生命周期的一种,生命周期只是一个方便developer理解的抽象概念而已,每个生命周期由多个goal顺序执行而组成,例如mvn clean执行的就是顺序执行clean里的pre-clean和clean两个goal,而每个goal具体是由plugin负责真正执行的。

Maven的生命周期和目标

maven deploy

Maven deploy配置方法详解
mvn deploy部署到nexus的教程详解
Maven - "maven-source-plugin"的使用
【Maven】Snapshot和Release版本的区别
依赖snapshot的时候需要注意使用mvn -U

继承

IDEA多模块maven项目子模块无法引用父模块依赖
idea踩坑 maven子项目没有继承父项目依赖
用dependency:tree查看maven引入jar包的传递依赖
Maven:分析剔除无用的jar引用

插件

maven-shade-plugin

解决 jar 包冲突的神器:maven-shade-plugin
Maven打包之maven-shade-plugin
maven-plugin-shade 详解
Apache maven shade plugin使用说明

Apache Maven Assembly Plugin

Assembly config

Maven 教程(20)— 使用maven-assembly-plugin插件来定制化打包

问题

解决Error:scalac:error while loading ,Error accessing
maven编译问题之 -The POM for XXX is invalid, transitive dependencies (if any) will not be available
【Maven】maven _remote.repositories 导致的local repository有依赖仍报找不到依赖问题
maven本地仓库中存在jar包,但编译不成功,显示jar包不存在
maven can’t find my local artifacts

Git

教程

git 简明教程
菜鸟教程 git 适合入门
git 廖雪峰 比菜鸟教程写得深
包含大多数操作,工作区就是此时代码的区域,暂存区就是add,本地仓库就是commit
git官网
对于windows操作系统,有setup版本和Windows Portable版本,Windows Portable版本可以看做一个压缩文件,将其解压到目标文件夹之后,只需要将该文件夹下的bin添加到环境变量即可在命令行使用git了


程序员必备基础:Git 命令全方位学习

  • git的本地分为三大部分,working tree就是工作目录,当前编辑的文件;stage(对应.git/index)为暂存区;本地仓库,即.git文件夹。add是将修改记录在暂存区;commit是把暂存区的记录提交到本地版本库;
  • 除了本地部分,还有远程仓库,git remote add origin xxx@xxx的功能是为当前的这个working tree注册一个远程仓库,别名为origin,这个origin只对当前working tree有效,会被记录在.git文件夹里
    对于远程仓库的理解不用想太多,就把它看成和本地仓库一样的东西,比如将本地仓库的分支a和分支b合并过程,与本地仓库的分支a和远程仓库分支c合并,这两种操作其实是没啥差别的。目前为止需要注意的,就是本地对远程仓库的记录,与远程仓库本身实际的情况会有一个同步的问题,所以就需要利用git fetch,将远程仓库同步到本地记录的远程仓库。
  • git fetch origin master操作是将远端的仓库的master分支拉取到本地记录的远端仓库
  • 进行整合的方式就是git merge origin/master,即将origin/master合并到此时的分支
  • git的版本回退使用的是git reset --hard会更新stage和working tree;
  • git push origin jackson的含义是将当前分支推送到origin/jackson分支,如果远端不存在对应分支的话,会在远端创建origin/jackson分支,但这个语句不会设定追踪;git push --set-upstream origin jackson的含义是将当前分支推送到origin/jackson分支 并且让当前分支去追踪远程的origin/jackson分支,也可以使用git push -u--set-upstream一样

具体用法

git add -A 和 git add . 的区别
Git忽略提交规则 - .gitignore配置运维总结
Git 瘦身代码库,永久删除大文件

标签

Git 中切换到某标签

撤销修改

Git:如何撤销已经提交的代码

分支

Git 合并远程分支


git pull命令的用法
pull就是从远程仓库的某个分支拉取合并到本地分支git pull origin 5意思就是从origin的5分支拉取代码同步到此时的分支
详解git pull和git fetch的区别:
Git中的‘HEAD’是什么?- Git名词解释
严格来说,head指向的是当前branch下的上次提交的结果
git-merge完全解析
git merge origin/5的含义是将origin/5分支合并到当前分支
git查看远程分支,并且切换到远程的分支
如果要追踪远程的分支,那就必须要在本地构建一个分支去追踪这个分支。
如果在本地新建了一个分支a,想把这个分支推送到远端,但此时远端是不存在该分支的,所以要指定远端分支git push origin a,然后还要按照下面的方法设置本地关联远程分支
git branch --set-upstream 本地关联远程分支
GIT如何查看本地分支与远程分支的关联配置
关联了之后,如果push和fetch不指定分支,那么就会使用upstream的分支,查看所有分支并查看远程本地的对应关系git branch -avv
git删除远程分支和本地分支
彻底搞懂 Git-Rebase
error: 没有父提交的情况下不能 ‘fixup’ 您可以用 ‘git rebase --edit-todo’ 修正,然后执行 ‘git rebase --continue’。或者您可以用 'git

删除

git删除本地和远程文件
(转)git从版本库中删除文件但不删除物理文件
如何删除GIT中的.DS_Store
Github删除某个文件的所有提交记录

版本管理

Git恢复之前版本的两种方法reset、revert(图文详解)
git stash详解
执行stash后,本地工作区会回复到上次commit的状态。至于文中提到的pop的顺序,可以看到test2被先pop出来,test1被留下了
git 放弃本地修改

配置

配置多个SSH-Key
管理git生成的多个ssh key
还可以在config文件里为每个远端仓库指定接口Port 22默认也是22,可以不改
Git配置用户名和密码

git-flow

git-flow 的工作流程
这个git-flow就是把多个git命令包了起来

protobuf

Protobuf 终极教程
[译]Protobuf 语法指南

RPC

花了一个星期,我终于把RPC框架整明白了!

VS

vs-color-picker

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值