【编程通用工具】

news/2024/11/23 20:50:48/

文章目录

  • 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>一起使用,如果需要依赖一个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 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框架整明白了!


http://www.ppmy.cn/news/430050.html

相关文章

编程开发软件工具下载

MyEclipse10.7版本 安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1jHJD88m 提取码&#xff1a;cda8 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦MyEclipse 2016版本 【推荐】&#xff1a; 安装包&#xff1a; 链接&#xff1a;https://pan.ba…

python好用的编程工具

作者&#xff1a;麻瓜编程 链接&#xff1a;https://www.zhihu.com/question/20381207/answer/286407355 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 最开始学 Python 的时候&#xff0c;因为没有去探索好用的工具…

编程软件推荐

1.Visual studio Visual studio是一款由美国微软公司开发的开发工具集&#xff0c;简称VS&#xff0c;它包括了整个软件的生命周期所需要的大部分工具&#xff0c;比如UML工具&#xff0c;代码管控工具&#xff0c;集成开发环境IDE等等。 2.WebStrom WebStrom是jetbrains公司旗…

Java编程工具有哪些比较实用

当下人们对Java编程的关注越来越多&#xff0c;对Java编程产生了浓厚的兴趣&#xff0c;比如有很多朋友很想知道Java编程工具有哪些比较好用?那么现在跟着源码时代小编一起去看看吧&#xff01; 一、Editplus EditPlus是功能很全面的文本、HTML、程序源代码编辑器。默认的支…

常用编程语言开发工具

编程语言开发工具可分为文本开发工具 和 集成开发工具。 文本开发工具的特点是 体积小&#xff0c;功能也不弱。 集成开发工具的特点是 体积大&#xff0c;功能强大。 1.文本编辑器 widows 下的 notepad&#xff08;记事本&#xff09; Unix下的 vim &#xff0c;这两个工具系…

十大Java编程工具

以下是大多数 Java 程序员在日常生活中使用的 10 种最常见的Java开发工具。如果您正在使用 Java 技术&#xff0c;您应该已经熟悉这些工具&#xff0c;但如果您不熟悉&#xff0c;那么现在是了解和探索它们的好时机。 1.Eclipse、NetBeans 或 IntelliJIDEA IDE 是 Java 开发人…

免费学习编程的10个好工具!

互联网时代的快速发展&#xff0c;很多人都在学习编程技术&#xff0c;小千今天为大家推荐的就是学习编程技术会用到的一些编程工具&#xff0c;免费学习编程的10个好工具!希望能够帮助到正在学习的小伙伴们。 免费学习编程的10个好工具&#xff1a; 1. Code/Racer Code/Racer…

Linux常用编程工具

文章目录 前言一、yum ——*软件包管理工具&#xff0c;完成第三方工具软件的安装与卸载功能*二、vim ——*编辑器&#xff0c;linux写代码的工具*三、g/gcc ——*编译器&#xff0c;即将高级语言编译成为机器指令*四、gdb ——调试器&#xff0c;调试程序运行过程**静态链接&a…