文章目录
- maven
- maven 基本配置
- maven pom设置
- maven 模块管理配置
- type
- scope
- optional
- build/resources
- lifecycle与Goal
- maven deploy
- 继承
- 插件
- maven-shade-plugin
- Apache Maven Assembly Plugin
- 问题
- Git
- 教程
- 具体用法
- 标签
- 分支
- 删除
- 版本管理
- 配置
- git-flow
- protobuf
- RPC
maven
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>
一起使用,如果需要依赖一个;意为本工程只需要父工程的pom文件里记录的坐标放进本工程的package
必须也得是pom
的父工程,那就一定要指定类型为pomdependencyManagement
,供本工程的子工程使用,而并不需要依赖这个父工程本身的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 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框架整明白了!