maven
文章平均质量分 68
绝世好阿狸
这个作者很懒,什么都没留下…
展开
-
【maven】依赖 及 问题排查
maven负责管理工程依赖的二进制的jar包。这些jar包可能编译时需要可能运行时需要。依赖会形成不同的分支,分支与分支之间没有关系。比如两个分支都依赖了jar包A,那么这其实是两个A,版本都可能不同,具体用哪个版本取决于maven内部机制。比如最短路径。有时候jar包缺失不会影响编译,是因为本工程的源码没有直接依赖这个jar包,而是依赖的其他jar包会依赖这个jar包,这种情况编译没有问题,但是运行时会报java.lang.ClassNotFoundException异常。...原创 2020-05-27 10:34:11 · 312 阅读 · 0 评论 -
【maven】spring-boot-maven-plugin 使用
在不使用spring-boot-maven-plugin插件打包springboot的web项目生成的jar包是无法直接运行的。因为直接打包的jar包仅仅是一个普通的jar包,没有打包依赖也没有指定main-class,所以无法直接运行。所以需要在pom中引入spring-boot-maven-plugin插件。该插件的作用是对普通的jar包做repackage,从而生成一个可执行的jar文件...原创 2020-04-12 21:51:30 · 3409 阅读 · 1 评论 -
【maven】插件 相关
这里记录下如何编写一个简单的插件。插件需要建立一个Mojo工程,idea里有对应的工程类型。插件命名最好为xxx-maven-plugin,因为如果是这样的命名,使用插件时可以只用xxx。不要使用maven-xxx-plugin,因为这是官方插件命名方式。pom文件:1. packaging需要定义为maven-plugin2.需要引入相关api的jar包。<...原创 2019-05-14 13:38:13 · 118 阅读 · 0 评论 -
【maven】多模块 实践
最开始可能只有一个项目,可能仅仅需要构建一个工程就可以,但是随着项目越来越大,在代码工程角度,需要做模块化,模块化指的工程的拆分以及工程内模块的拆分。工程的拆分可以按照业务来拆分,模块的拆分可以按照功能来拆分。举个例子:项目包含了订单业务以及用户业务,那一般来讲是要拆成两个工程的。每一个工程都可以大致分为三个模块:sdk,service,api。sdk:封装本工程可以暴露...原创 2019-05-14 15:50:46 · 334 阅读 · 0 评论 -
【maven】maven-scm-plugin 使用
scm-maven-plugin是一款代码版本控制的插件。maven自己将版本控制的过程抽象出来,然后将市面上各种版本控制的工具都做了对应了实现。这款插件其实我们不太会用到,主要是maven的release插件会使用该插件提交代码,这时就需要抽象,自己搞一套出来,否则maven根本不知道怎么提交代码,是git呢还是svn呢。下面简单记录下使用。这里作为例子,代码仓库用的github。第一...原创 2019-05-19 18:21:37 · 2565 阅读 · 0 评论 -
【maven】maven-release-plugin 使用 (git)
简介很nb的插件。为什么?一般开发,基于一个snapshot版本开发,开发完以后,发一个对应的release的包,然后再将代码版本更新为下一个snapshot版本。这些工作当然可以纯手工完成,但是可能比较痛苦,这里介绍的release插件就是干这个的。使用这里使用了github作为代码仓库,使用本地的一个nexus作为maven的私服。1. 定义scm。scm是一款抽象了代码本...原创 2019-05-19 19:49:26 · 6220 阅读 · 0 评论 -
【maven】assembly 插件
assembly是一个打包的插件,可以允许我们定制打包的内容已经制定主类。 <build> <plugins> <plugin> <artifactId> maven-assembly-plugin </artifactId> ...原创 2019-05-08 00:36:09 · 163 阅读 · 0 评论 -
【maven】工程版本 管理
工程自己的版本号可以使用maven-release-plugin。每次从代码库拉代码开发时,拉到的都是下一个snapshot版本号,什么意思?比如当前稳定版是3.0.0,那么拉到的就是3.0.1-SNAPSHOT,开发完本地install时,打的jar包就是3.0.1-SNAPSHOT版本的。此时可能会在本地使用这个快照包做一些测试。测试没有问题,就需要发release包。使用release插...原创 2019-05-21 00:33:44 · 358 阅读 · 0 评论 -
【maven】scope
首先要明白maven有3种classpath,不同阶段对应不同的classpath。test:只在test阶段用;compile:只在compile阶段用;runtime:最后jar包里打入的;依赖的scope就是用与指定这个依赖出现在上述哪一个classpath的。最常见的是compile,默认也是这个,表示会出现在上面所有的classpath中。最简单的事test,只在test时...原创 2019-05-16 10:12:17 · 174 阅读 · 0 评论 -
【maven】maven 快照机制
搞不明白这个,拉取或者更新时就可能遇到各种各样的问题。首先release包的逻辑是很清晰的,就是看本地有没有,没有就从远程拉。这个是合理的,因为同一个版本号只能在仓库里发一个包,意味着只要本地有了,就应该是最新的。不应该允许从远程仓库删除release包。快照版本呢?每一个快照版本可以有多个包,每一个包都有对应的时间戳。发快照包时,远程maven仓库会将时间戳记录在一个叫做maven-...原创 2019-05-21 16:17:45 · 1697 阅读 · 0 评论 -
【maven】versions-maven-plugin 使用
一句话概括,这个插件是用来修改pom的版本的,几乎是所有的版本号,比如工程,依赖和插件等等。那么这个插件有什么用?之前介绍过maven的版本管理经验,所有依赖都有一个root-pom来统一管理。这样的话,每发一个release的包,其实就应该同时也修改了root-pom中这个包的版本号,这样,其他工程才能依赖到最新的代码。那么修改root-pom版本号的任务就可以交给versions插...原创 2019-05-23 00:40:07 · 4584 阅读 · 0 评论 -
【maven】jar war
jar:可以分两种,一种是sdk,提供给其他项目使用的接口或者公共类库,这种打包不需要打依赖,只打本工程的文件即可。另一种是main程序,比如说定时任务或者rpc服务等,这种是需要在生产环境运行的,需要打依赖,可以使用类似assembly这样的插件。war:如果使用maven则比较方便,因为maven有自己的文件目录规范,并且会自动把依赖的jar包打入war包lib目录,这一点通过war-...原创 2019-06-25 23:26:43 · 141 阅读 · 0 评论 -
【maven】maven-jar-plugin 搭配 maven-dependency-plugin 使用
正常的main函数程序,我们直接package生成的jar包无法直接运行,因为没有再/META-INF/MANIFEST.MF中指定主类。1.指定主类有很多方法,这里介绍下最简单的使用maven-jar-plugin插件的方法。只需要加一条mainClass的配置,指定主类名即可;这样不出意外可以运行。2.如果我们的项目有外部依赖,即定义了dependency,那么默认不会把依赖打...原创 2019-05-14 00:08:52 · 6970 阅读 · 0 评论 -
【maven】mvn 多模块构建 参数
现在的项目多模块越来越流行,下对于多模块的项目,有时我们希望只构建其中的一个或者几个模块,如果直接进入模块目录下执行mvn命令,一般会失败,因为单个模块没有聚合模块pom中的信息或者一些本工程内依赖的其他模块就会构件失败。所以,一般会使用下面的参数构建,此时仍然是以多模块的视角来让maven处理的。-pl:指定打包的模块,可以用路径也可以用坐标,如果父项目同时是父目录,那么进入父目录下,直接“...原创 2019-05-13 23:48:57 · 5421 阅读 · 0 评论 -
【maven】profile 配置不同环境
profile确实是一项很有用的功能,因为我们的项目的运行环境可以有几种,开发环境,测试环境,线上环境,意味着不同环境许多配置是不同的,比如数据库,缓存之类的。如果不借助一些构建工具,那么我们需要每改变一个运行环境就修改一次项目的配置文件,这在大型项目中很不方便,因为每一次改动都有可能引入错误,众多的配置文件很有可能遗漏。其次开发也不方便,提交代码什么的需要注意配置文件。但是借助了maven的pr...原创 2018-04-02 22:12:02 · 633 阅读 · 0 评论 -
【maven】resources 标签
默认maven只会把src/main/resources目录下的文件拷贝至classes文件夹下,这个其实是在超级pom下定义好的: <build> <directory>${project.basedir}/target</directory> <outputDirectory>${project.build.directory}...原创 2018-04-02 23:03:20 · 670 阅读 · 0 评论 -
【maven】生命周期和插件
maven生命周期指的是特定的一组有序的阶段。软件构建过程经过多年来的总结和发展,其实总归会有几个阶段,比如编译,测试,打包等,而且内置是有一定的顺序。所以maven所做的就是把这些经验性的总结吸收到自己的理念中,规范出一套通用的流程,这样maven的使用者就不用再重复地关心这个过程。maven最终总结出3个生命周期,每一个对应不同的使用场景,它们是default,clean,site。生命周...原创 2018-04-04 15:02:21 · 290 阅读 · 0 评论 -
【maven】archetype创建项目 目录丢失
通过maven命令创建的项目总是和别人不一样,少了一些目录。比如:通过这个quick-start生成的目录结构没有resources文件夹:后来知道可以手动添加解决,但是貌似没人探究为什么会这样,忍不住略微查了查。原来每一个archetype的模板也是一个jar文件,里面定义了项目的目录结构,可以从https://mvnrepository.com/artifact/org.apache.mave...原创 2018-04-17 21:43:48 · 2165 阅读 · 2 评论 -
【maven】maven-thrift-plugin 插件使用 + Java项目中thrift使用的正确姿势
1.首先介绍下maven-thrift-plugin插件在java中使用该插件可以让我们在maven中使用 编译.thrift文件,在大型项目中尤其有用。下面看下如何使用:假设这里要提供一个HelloService的thrift服务:namespace java com.liyao.serviceservice HelloService{ string helloString(1:str...原创 2018-05-02 22:36:19 · 19815 阅读 · 4 评论 -
【maven】打包源码
只需要使用maven-source-plugin插件即可: org.apache.maven.plugins maven-source-plugin 3.0.1原创 2018-05-02 22:59:57 · 346 阅读 · 0 评论 -
【maven】nexus3 使用
nexus是一种常见的maven私服软件。网上介绍的都是nexus2的使用,下面是最新版nexus3的使用方式。首先需要从官网下载nexus3的包,很卡。下载好以后解压会有两个文件夹:nexus的和sonatype-work。前者是功能的实现,后者负责存储数据。进入nexus的bin目录下:启动./nexus start关闭./nexus stop启动之后,可以访问:http://localhos...原创 2018-05-06 13:26:21 · 7388 阅读 · 1 评论 -
【maven】snapshot release
拉取jar包时,release和snapshot的逻辑是不同的。release版本先看本地仓库是否存在,如果存在就直接使用,否则才会去远程仓库下载。但是snapshot则不同,会根据updataPolicy来处理。如果到了更新周期,即使本地有,也会去远程仓库查看,最后返回最新的快照版本。策略在pom中定义: <repository> <id>nexus1&l...原创 2018-05-06 14:16:30 · 569 阅读 · 0 评论 -
【maven】聚合和继承
在实际使用maven构建项目的时候,可能会遇到下面的问题:一个项目包含了很多的模块,这些模块每一个都是一个独立的mvn项目,那么一次构建必须分别为每一个模块运行mvn的命令,有没有办法只运行一个命令就把这些模块全部打包?有,使用聚合maven。我们需要新建一个聚合的maven项目,这个项目本身没有任何业务的逻辑,只是单纯负责打包其他模块的。下面是一个例子:假设项目里现在有data模...原创 2018-08-30 00:06:06 · 231 阅读 · 0 评论 -
【maven】依赖
mvn dependency:list可以列出来项目中解决的依赖;mvn dependency:tree可以以树形的形式展示解析的依赖。为了查找代码中的jar包是通过哪一个依赖引入的,这个命令大有帮助。当我们有大量的依赖需要查看时,则可以把结果重定向到文件,然后搜索。或者也可以使用一个-Dincludes=groupId:artifactId参数指定要查找的jar包。-Dincludes使用最...原创 2018-09-03 23:03:26 · 498 阅读 · 0 评论 -
【maven】helloworld 运行junit
maven安装过程略过。版本3.5.3。说先使用archetype插件生成项目骨架:mvn archetype:generate接着会要求填入一下项目的参数,或者项目坐标之后就可以看到项目目录了。pom.xmlsrc main test这是maven“约定优于配置”的体现,默认地,main目录下是源码,test目录是下是测试,最终打包时,测试部分不会进入包中。打开pom,看到junit依赖默认...原创 2018-04-01 13:26:57 · 504 阅读 · 0 评论