JavaEE maven 综合实践
来源:互联网 发布:thug life软件下载 编辑:程序博客网 时间:2024/06/05 07:01
本文是个人工作过程中收集整理的maven内容,希望对他人也能有所帮助,其中会结合实际项目给出基本框架,后续可根据需要扩展。
关于Maven的基础知识可以参考《Maven权威指南》及本文后面的参考资料。网络上有很多文章,原理性太强,我结合自己的工作会给出一些实际的配置,当不符合需要时再查阅资料进行修改即可。
阅读本文最好具备一些Maven的概念,比如pom是什么。
1、Maven入门
1.1 Maven基础知识
生命周期:maven有生命周期的概念。
process-resourcesresources:resourcescompilecompiler:compileprocess-test-resourcesresources:testResourcestest-compilecompiler:testCompiletestsurefire:testpackageejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar:rar or war:warinstallinstall:installdeploydeploy:deploy继承与聚合:用来组织基于maven管理的目录结构
继承是一个父子结构,父Pom使用<dependencyManagement>定义依赖,子pom视需要进行添加或修改引用信息
注意点:继承的<relativePath> 不是必须,但是如果parent在其他路径的话,这个路径一定要正确
<!-- 继承pom范例 --><parent><groupId>com.xx.xx</groupId><artifactId>base_pom</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../base_pom</relativePath> <!-- base_pom在其他路径时一定要设置relativePath --></parent>
聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
<!-- 聚合pom范例 --><modules><module>db_jpa_permission</module><module>db_jpa_algorithm</module><module>db_module_jdbc_example</module><module>db_jpa_permission_model</module></modules>
聚合与继承是可以混合使用的。
1.2 安装Maven & Repository
推荐 附录参考资料中的 Maven 那点事儿
1.3 mvn 常用指令:
$mvn clean :该命令调用clean生命周期的clean阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段。
$mvn test:该命令调用default生命周期的test阶段。实际调用的是default生命周期的validate、initialize等,直到test的所有阶段。
$mvn clean package:该命令调换用clean生命周期的clean阶段和default生命周期的package阶段。
$mvn clean package -Dmaven.test.skip=true :跳过上述命令的test周期
$mvn clean install:该命令调换用clean生命周期的clean阶段和default生命周期的instal阶段。
2、Maven实践
在使用maven的过程中,一定会利用其聚合与继承的功能,从而对项目的构建进行有效管理。
a、用一个最顶层的pom完成最基本的配置(我称呼其为base_pom),如确定jdk版本、修正中文字符乱码等问题
b、n个抽象功能pom模块继承base_pom,并添加特定属性,如DB型pom、webservice型pom等
c、具体功能模块pom继承抽象pom模块,并完成面向实际功能的依赖配置工作
2.1 maven 基本配置(base_pom)
定义全局属性
<properties><manifest.location>target/META-INF</manifest.location><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java-version>1.7</java-version><junit.version>4.12</junit.version><log4j-version>1.2.16</log4j-version><slf4j-version>1.7.7</slf4j-version></properties>
定义插件
<plugins><!-- 统一设定jdk版本 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>${java-version}</source><target>${java-version}</target><encoding>UTF-8</encoding></configuration></plugin><!-- 解决maven test命令时console出现中文乱码乱码 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><forkMode>once</forkMode><argLine>-Dfile.encoding=UTF-8</argLine></configuration></plugin></plugins>
2.2 maven for jetty
当某个模块需要web容器支持时可以使用
<plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.2.10.v20150310</version><configuration><scanIntervalSeconds>10</scanIntervalSeconds><httpConnector><port>9090</port></httpConnector><webAppConfig><contextPath>/${project.artifactId}</contextPath></webAppConfig></configuration> <!-- 这里适合8.1.16 版本<configuration><scanIntervalSecond>10</scanIntervalSecond><webApp><contextPath>/${project.artifactId}</contextPath></webApp><connectors><connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"><port>8787</port><maxIdleTime>60000</maxIdleTime></connector></connectors></configuration>--></plugin>
2.3 maven for osgi bundle(karaf)
以下给出了base_pom中的基本设置,在各个bundle中还需要单独根据war、bundle等不同package属性设置下。
具体可参考附录中的Apache Felix - Apache Felix Maven Bundle Plugin (BND)
<pluginManagement><plugins><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><version>2.5.3</version><extensions>true</extensions><configuration><instructions><Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName></instructions></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.6</version><configuration><archive><manifestFile>META-INF/MANIFEST.MF</manifestFile><addMavenDescriptor>false</addMavenDescriptor></archive></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><archive><manifestFile>META-INF/MANIFEST.MF</manifestFile><addMavenDescriptor>false</addMavenDescriptor></archive></configuration></plugin><plugin><groupId>org.eclipse.m2e</groupId><artifactId>lifecycle-mapping</artifactId><version>1.0.0</version><configuration><lifecycleMappingMetadata><pluginExecutions><pluginExecution><pluginExecutionFilter><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><versionRange>[1.0.0,)</versionRange><goals><goal>manifest</goal></goals></pluginExecutionFilter><action><ignore></ignore></action></pluginExecution><pluginExecution><pluginExecutionFilter><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><versionRange>[1.0.0,)</versionRange><goals><goal>copy-dependencies</goal><goal>unpack</goal></goals></pluginExecutionFilter><action><ignore /></action></pluginExecution></pluginExecutions></lifecycleMappingMetadata></configuration></plugin></plugins></pluginManagement>
3、附录
3.1 参考资料
深入理解maven及应用
maven详解之继承与聚合
maven那点事
利用maven中resources插件的copy-resources目标进行资源copy和过滤
MAVEN打包时,复制资源文件到指定目录
Apache Felix - Apache Felix Maven Bundle Plugin (BND)
Configuring the Jetty Maven Plugin
3.2 maven的完整生命周期
maven有三个相互独立的生命周期,分别是clean、default、site。clean生命周期目的是清理项目,default生命周期目的是构建项目,而site生命周期目的是建立项目站点。
clean生命周期包含三个阶段,主要负责清理项目,如下:
default生命周期定义了真正构建时所需要执行的所有步骤,包含的阶段如下:
site生命周期的目的是建立和发布项目站点,maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息,包含的阶段如下:
pre-siteexecutes processes needed prior to the actual project site generationsitegenerates the project's site documentationpost-siteexecutes processes needed to finalize the site generation, and to prepare for site deploymentsite-deploydeploys the generated site documentation to the specified web server3.3 maven属性
1、内置属性:如${basedir}表示项目根目录,${version}表示项目版本
2、POM属性:用户可以引用pom文件中对应的值。如:
${basedir} 项目根目录
${project.build.directory} 构建目录,缺省为target
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging} 打包类型,缺省为jar
${project.xxx} 当前pom文件的任意节点的内容
3、自定义属性:用户可以在pom的<properties>元素下自定义maven属性。
4、setting属性:用户可以使用以settings开头的属性引用settings.xml中xml元素的值,如${settings.localRepository}指向用户本地仓库的地址。
5、java系统属性:maven可以使用当前java系统的属性,如${user.home}指向了用户目录。
6、环境变量属性:所有环境变量都可以使用以env.开头的属性。如:${env.JAVA_HOE}。
- JavaEE maven 综合实践
- maven发布javaee项目
- 综合实践求税收
- javaee综合应用---图书馆系统项目
- ecFun——JavaEE综合实战项目
- maven综合应用
- Maven的综合知识点
- Maven实践
- maven实践
- maven 实践
- maven 实践
- Eclipse javaEE 创建maven项目
- JavaEE之Maven构建一
- Java spring 综合 maven综合-1
- Java spring 综合 maven综合-2
- Android+SSH综合项目实践
- 程序设计语言综合实践 6.6 game
- 程序设计语言综合实践 6.1 prime
- zeromq退出与linger值的设置
- Failed to instantiate the default view controller for UIMainStoryboardFile 'Main'
- 三层架构及生活实例
- 简单动画
- 利用lucene对文件内容进行关键字检索
- JavaEE maven 综合实践
- POJ 3253 Fence Repair(贪心, Huffman编码)
- COLOR RGB BGR以及字符串之间转换
- NSFileManager—使用NSData缓存
- WebSphere问题集锦(未完待续)
- 什么导致了Context泄露:Handler&内部类
- 如何在Visual Studio项目中正确添加汇编代码
- Shiro haspermission 权限验证有关问题
- [Android开发]仿天天P图带气泡显示百分比进度的自定义SeekBar