MAVEN运行基本过程
Maven运行周期
每次使用maven的命令进行一些操作时,都是一个运行周期!详细的运行周期信息参考其官网描述: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference.
这是给出一个默认的一个生命周期(每个命令,其周期不同,具体参考上面网址上的内容):
validate、compile、test、package、integration、verify、install、deploy
Maven插件运行方式
如上所述,Maven在运行时会按照一定的生命周期进行运行,每个周期叫一个phase!在每个phase时,maven会看环境(即pom.xml)中配置了哪些插件,然后会运行它!
Maven插件的一些基本设置
Packaging
作为一个maven插件项目,它的项目组织方式packaging应该为maven-plugin。这一点很重要,选择这一选项,在项目打包发布时它将为你的项目自动生成一些maven必要的文件!
Goal
这个参数指定运行哪个目标逻辑。因为在一个maven插件中,可以设定若干个执行目标,如我们经常使用的maven-war-plugin,它的goal也有好几个,如war、help、inplace等等。
对应的就是对应插件的命令。如果有多个的话,有默认启动的配置方式。
Phase
这个参数就是指定该插件在哪个阶段启动!可以在使用时在pom.xml中重新定义!
plugin.xml
每个maven插件都有这样一个配置插件参数与环境的配置文件!比如,上面说的默认情况下指定运行哪个goal、参数的默认值等等!
详细的maven插件开发指南可以参考:http://maven.apache.org/plugin-developers/index.html。
键值内容替换
背景及需求
作为一个项目,它分为开发环境与正式发布环境!这两个环境的一些系统参数配置是不一样的,需要在打包发布时区分对待。而我们的所有系统参数是配置在properties文件中,使用提键值对方式存储。要实现在正式环境发布时替换其中的一些参数值,就需要在maven正式环境上打包时需要实现替换操作!而这个过程肯定要交给插件在处理!
插件库是否有这样的插件
基于上述的实际情况的需求,于是在网上找了一下有没有这样的插件,结果只有一个文本替换的插件,而不是键值对替换的插件,而这个插件对于我们来说,使用的风险较大!因此,我决定自己写一个插件来实现该功能!
设定目标与逻辑
目标:实现键值对的替换!同时支持在pom.xml中使用时指定Map或指定键值对的文件(可以是多个文件)来实现结果的替换。
逻辑:检查结果键值对信息(Map或者是文件)是否存在,然后分别将结果键值对读取并合并到一个临时Map中,同时将需要替换的键值对文件中的信息读取到内存中,然后将结果中的内容替换到目标Map中!然后将目标Map重新生成properties文件!
当然,在测试环境打包时,可以指定跳替换,这样就保持了我们开发属性,只有在正式发布时才指定为替换操作!
css/js引用织入
背景及需求
这个需求是我们设计人员在设计页面时遇到的烦恼。当设计人员在设计一个页面的样式时,他会发现很多的页面的样式引用的css/js都差不多,而且有的css还具有一定的关联性(即引用A的时候必须要引用B),但每次都要写多次引用,有时候可能还会写丢掉某个,这样每次还要关心该页面引用哪个样式等。于是他想问:有没有一种import方式,就写代码一样,我在写一个css的时候,只要指定它依赖的css就可以了,这样不就减少了我去关心总共要引入哪些css的精力,而让我更多滴去关心业务的设计?
插件库是的现有插件
在这样的一种诉求下,我们本着不重复造轮子的理念,去网上寻求方法,结果没有一个简单易用的插件!
设定目标与逻辑
在求人不成,只能求已的情况下,我们采用了一种自定义的织入方式。其使用方式为:只要在css中定义了import关键字,程序就会把引入的css内容织入到该css中,另外,该插件还支持嵌套方式引用,即import的css中还可以支持import!
不过在该插件的使用有,有几个注意的地方:
- @import引用的文件要写完整,即,从指定的cssDirPath路径下开始写起,不支持"../"这样的相对方式,如@import url("css/oss.css")
- 注意url中路径前面有“/”与没有“/”是不同的路径,如:@import url("/css/oss.css")与@import url("css/oss.css")指定的路径是不相同的,
- @import url("/css/oss.css")指:引入webapp文件夹下的css/oss.css;
- @import url("css/oss.css")指 :引入当前文件所在文件夹下的css/oss.css;
即,有“/”表示从网站根目录开始查找。
- 如果有两个或两个以上的@import引用,则每个@import各占一行。不能写在同一行!
- @import格式一定要遵守@import url("oss文件"),其中,@import与url之间至少要有一个空格。
- 如果有其它对css文件内容进行处理的,则将该插件放在这些插件之前。
- 不要重复引用。如下面这样,只会替换第一个:
- @import url("css/oss.css")
- @import url("css/oss.css")
文件复制
背景及需求
其实这个插件的出现是无奈的,是css织入插件的副产品!本来想合并到css织入的插件中,但考虑到css织入的插件已经可用且没有bug,如果再将该插件集成进去,那后果就可能难以预测,所以自己再写一个独立的插件。
为什么会是副产品呢?当我们的css织入插件在将css内容织入好之后放到了target打包下的目录中后,maven的war包插件会有一个资源复制的过程,会将我们已经织入好的css文件又重新替换成了原来的import方式的内容!而war包插件中又无法配置指定几个文件不替换的功能,于是便有了这个插件!
设定目标与逻辑
目标:实现项目中指定文件及文件夹的复制到target目录中,便于最终打包!
逻辑:可以指定对哪些文件进行复制,以及指定如果有的文件已经存在时是否强制替换!在pom.xml中使用时,将war包的插件的文件复制功能去除,启用该插件功能以防止已经织入好的文件被替换!
实用Maven设置
插件的合并
正如上面对插件的goal参数的说明,其实这三个插件是可以合并到一个插件项目中,有三个Mojo(即目标命令)。但因为这三个插件是在项目的研发过程中一个个出现的,而且考虑到对前一个插件不影响的前提下,一直没有将其合并到一个项目中!
Profile的使用
正如我们键值替换插件的产生背景所说的:在开发库与正式库之间的一些环境配置是不一样的!也就是说,在测试打包时运行的命令与正式环境打包时运行的命令是不一样的!这种不同环境运行不同的命令的情况,使用的就是Maven的profile定义。该定义可以在settings.xml或pom.xml中指定若干个id不同的profile,分别指定不同的一些环境变量!如:采购项目的profile配置为:
<profiles>
<profile>
<id>prod</id>
<properties>
<zip.skip>false</zip.skip>
<replace.skip>false</replace.skip>
<package.excludes>WEB-INF/lib/not_exists.file</package.excludes>
</properties>
</profile>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<zip.skip>true</zip.skip>
<replace.skip>true</replace.skip>
<package.excludes>WEB-INF/lib/*.jar</package.excludes>
</properties>
</profile>
</profiles>
使用时使用命令如:mvn package –P prod。上面的配置表示,如果不指定P参数,则默认为dev
内存参数的设置
在一些大型的项目中,项目的模块较多或项目的内容较大时,在运行Maven的一些打包等命令时会出现内存溢出的问题,这时候,解决的办法只是需要我们改变一下maven的内存参数设置即可!其改变步骤参考:http://192.168.21.248:83/confluence_dev/pages/viewpage.action?pageId=21102871。
上传第三方jar包与源码
有时候,我们需要用到一些第三方jar包,而很不幸滴是,这些jar包组织方式并不是Maven方式,你无法使用Maven的dependency来引用它,这时我们需要做的就是将其上传到我们的maven库中即可!但如果这个jar包既有jar包又有源码包时该如何上传呢?好吧,其实解决办法很简单,将两个jar包同时上传,如果名字有冲突请取个别名即可!相应文档参数: http://192.168.21.248:83/confluence_dev/pages/viewpage.action?pageId=33619970。
文件名为中文打war包
最后要说的是war包插件!这个插件不止一次为我找来了不必要的麻烦!在war包进行打war包的过程中,它使用的是环境默认编码,而且它不支持配置使用指定的编码(那段代码那边有一个令人无限期待下去的TODO标记)!!于是,如果你的项目中有文件的名称为非ascii码的字符时……你就会很悲惨滴发现在war包中这些文件的名称是乱码!
这一点,请大家在处理项目时一定要注意!
分享到:
相关推荐
然而,有时候Maven的内置插件无法满足特定的需求,这时就需要自定义Maven插件来扩展其功能。本篇文章将深入探讨如何实现自定义的Maven插件。 首先,了解Maven插件的基本结构至关重要。一个Maven插件通常由一组Mojo...
Maven插件的源码通常基于Java编写,利用Maven插件API来实现目标功能。通过阅读源码,我们可以更好地了解插件的内部机制,定制插件行为,或者创建自己的插件。 总结,Maven插件是Maven构建系统的核心部分,它们执行...
2. **源代码分析**:插件运行时,会扫描指定的接口类和参数类,解析它们的注释、方法签名、参数类型等关键信息。这是生成API文档的基础数据。 3. **模板应用**:用户可以提供自定义的Word模板(如template.docx),...
总结起来,"Apache Maven插件包"是Java开发的重要工具,它简化了构建过程,统一了项目结构,提高了开发效率,并且通过强大的插件机制,可以扩展以满足各种复杂的构建需求。了解和掌握Maven,对于任何Java开发者来说...
4. **Maven插件**:Maven的插件机制十分强大,如`maven-compiler-plugin`用于编译Java源代码,`maven-surefire-plugin`负责运行单元测试。 结合Mybatis和Maven,我们可以使用Mybatis Generator插件来自动化生成DAO...
Eclipse Mars的一大亮点是它自带了Maven插件,这使得Java开发者可以直接在IDE内部管理他们的Maven项目,而无需额外安装插件。 Maven是Apache软件基金会开发的一个项目管理和综合工具,主要用于Java项目构建、依赖...
1. **性能提升**: Maven 3.5.2对缓存机制进行了优化,提高了构建速度,减少了不必要的网络请求。 2. **更好的错误报告**: 提供更清晰的错误信息和堆栈跟踪,帮助开发者更快地定位问题。 3. **依赖管理增强**: 修复...
3. **编写Mojo(Maven可执行目标)**:Mojo是Maven插件中的核心元素,代表一个可执行的目标。在Java类中定义Mojo,它必须继承自`org.apache.maven.plugin.Mojo`接口,并使用`@Mojo`注解标记。这个类包含了插件执行的...
通过了解和掌握Maven的使用,以及如何在Eclipse中集成Maven插件,开发者可以更加专注于编写代码,而不是处理构建问题。因此,对于Java开发者来说,学习和熟练运用Maven及其Eclipse插件是十分必要的。
例如,`maven-compiler-plugin`用于编译Java源代码,`maven-surefire-plugin`用于运行测试。 ** 总结 ** Maven 3.5.0作为Maven的重要版本,带来了性能提升、依赖管理优化、插件管理改进等多个方面的增强,使得Java...
Maven插件提供了扩展Maven功能的能力,每个插件包含一系列的目标,通过命令行调用特定的插件目标,可以执行各种构建任务,如生成文档、打包项目、部署到服务器等。 #### 站点生成与报告 Maven可以自动生成项目站点...
使用MyBatis Generator插件与Maven结合的步骤大致如下: 1. **添加依赖**:在Maven项目的pom.xml文件中,我们需要添加MyBatis Generator的依赖,这样Maven才能在构建过程中找到并执行生成代码的插件。 2. **配置...
4. **插件**: Maven通过插件机制扩展功能,如编译、测试、打包、部署等都由对应的插件实现。 5. **项目信息管理**: POM文件不仅包含依赖信息,还记录项目的基本信息,如作者、版本、描述等。 **使用Maven** 1. **...
在开发过程中,`mvn install`命令会编译源代码,运行测试,并将结果部署到本地仓库,使得其他项目可以通过依赖管理机制引用。`mvn clean`用于清除构建生成的临时文件,而`mvn package`则会打包项目,生成最终的JAR或...
- **运行与调试**: 直接运行 Maven 的生命周期目标,如 "Run As" -> "Maven Build",设置生命周期阶段(如 "install" 或 "test")。 - **管理依赖**: 可以通过 POM.xml 文件直接编辑依赖,Eclipse 会自动同步。 - ...
Maven的插件机制允许扩展其功能。例如,maven-compiler-plugin用于编译Java源代码,maven-surefire-plugin执行单元测试,maven-jar-plugin则用于打包项目为JAR文件。 **5. 核心组件** 在压缩包文件中,我们可以看到...
Eclipse是一款流行的Java集成开发环境,可以通过Maven插件(如M2Eclipse)来集成Maven。安装M2Eclipse插件后,用户可以在Eclipse中直接创建、管理Maven项目,并且能自动同步本地Maven仓库与远程仓库的依赖。 ** ...
1. **性能提升**: Maven 3.8.5 对缓存机制进行了优化,提升了依赖解析速度,使得构建过程更快。 2. **错误修复**: 该版本修复了之前版本中的一些已知问题,提高了稳定性。 3. **更好的多模块项目支持**: Maven ...
4. **插件更新**:内置的Maven插件可能有新的功能或更新,以支持最新的技术栈。 5. **更好的用户体验**:可能改进了命令行接口,提供更友好的提示和反馈。 在使用Maven 3.8时,你需要根据自己的系统环境(Windows、...
7. **Maven插件** - `maven-compiler-plugin`: 编译源代码。 - `maven-surefire-plugin`: 运行单元测试。 - `maven-jar-plugin`: 打包Java应用程序或库为JAR文件。 - `maven-war-plugin`: 打包Web应用程序为WAR...