利用Maven继承关系简化项目POM配置
来源:互联网 发布:终极轰炸机软件下载 编辑:程序博客网 时间:2024/05/14 15:12
昨天看到有人问依赖管理的问题,所以就想把自己在使用maven时的经验与大家进行分享。
1、首先建一个root/pom.xml
主要作用就是配置一般项目都需要的基本信息。
如:编码,编译版本,生成eclipse项目时的编码,生成manifest描述,单元测试常用依赖,生成javadoc,生成source,eclipse:eclipse时自动关联source与javadoc,本地仓库配置等。
我定义的Final Name的格式是 ${project.artifactId}-${project.version}-r${svn.revision}-${maven.build.timestamp},其中包含了svn的rev号与构建时的时间(我们用的是svn)
注意我用的maven-svn-revision-number-plugin 1.7目前不支持1.7格式的svn,官方插件目前已经升级到1.12了说是可以了,大家可以试试。
这种格式方便我们对产出的项目版本进行有效的跟踪(manifest中也有相关的信息)
文件名如:project1-core-1.0-SNAPSHOT-r82-20120503091343.jar
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion
>4.0.0</
modelVersion
>
<
groupId
>org.noahx</
groupId
>
<
artifactId
>noahx-root</
artifactId
>
<
version
>1.0</
version
>
<
packaging
>pom</
packaging
>
<
properties
>
<
maven.build.timestamp.format
>yyyyMMddHHmmss</
maven.build.timestamp.format
>
<
project.build.sourceEncoding
>UTF-8</
project.build.sourceEncoding
>
<
project.reporting.outputEncoding
>UTF-8</
project.reporting.outputEncoding
>
<
maven.compile.source
>1.5</
maven.compile.source
>
<
maven.compile.target
>1.5</
maven.compile.target
>
<
maven-compiler-plugin.version
>2.3.2</
maven-compiler-plugin.version
>
<
maven-eclipse-plugin.version
>2.9</
maven-eclipse-plugin.version
>
<
maven-svn-revision-number-plugin.version
>1.7</
maven-svn-revision-number-plugin.version
>
<
maven-jar-plugin.version
>2.4</
maven-jar-plugin.version
>
<
maven-war-plugin.version
>2.2</
maven-war-plugin.version
>
<
maven-source-plugin.version
>2.1.2</
maven-source-plugin.version
>
<
maven-javadoc-plugin.version
>2.8.1</
maven-javadoc-plugin.version
>
<
maven-deploy-plugin.version
>2.7</
maven-deploy-plugin.version
>
<
jmock.version
>2.5.1</
jmock.version
>
<
junit.version
>4.10</
junit.version
>
</
properties
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>com.google.code.maven-svn-revision-number-plugin</
groupId
>
<
artifactId
>maven-svn-revision-number-plugin</
artifactId
>
<
version
>${maven-svn-revision-number-plugin.version}</
version
>
<
executions
>
<
execution
>
<
goals
>
<
goal
>revision</
goal
>
</
goals
>
</
execution
>
</
executions
>
<
configuration
>
<
entries
>
<
entry
>
<
prefix
>svn</
prefix
>
</
entry
>
</
entries
>
</
configuration
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
version
>${maven-compiler-plugin.version}</
version
>
<
configuration
>
<
source
>${maven.compile.source}</
source
>
<
target
>${maven.compile.target}</
target
>
<
encoding
>${project.build.sourceEncoding}</
encoding
>
</
configuration
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-eclipse-plugin</
artifactId
>
<
version
>${maven-eclipse-plugin.version}</
version
>
<
configuration
>
<
downloadSources
>true</
downloadSources
>
<
downloadJavadocs
>true</
downloadJavadocs
>
<
useProjectReferences
>true</
useProjectReferences
>
<
wtpversion
>2.0</
wtpversion
>
<
additionalConfig
>
<
file
>
<!-- Text file encoding : UTF-8 -->
<
name
>.settings/org.eclipse.core.resources.prefs</
name
>
<
content
>
<![CDATA[eclipse.preferences.version=1${line.separator}encoding/<project>=UTF-8${line.separator}]]>
</
content
>
</
file
>
<
file
>
<!-- New text file line delimiter : Unix -->
<
name
>.settings/org.eclipse.core.runtime.prefs</
name
>
<
content
>
<![CDATA[eclipse.preferences.version=1${line.separator}line.separator=\n${line.separator}]]>
</
content
>
</
file
>
</
additionalConfig
>
<
classpathContainers
>
<
classpathContainer
>org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6</
classpathContainer
>
</
classpathContainers
>
</
configuration
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-jar-plugin</
artifactId
>
<
version
>${maven-jar-plugin.version}</
version
>
<
configuration
>
<
archive
>
<
manifest
>
<
addDefaultImplementationEntries
>true</
addDefaultImplementationEntries
>
</
manifest
>
<
manifestEntries
>
<
Build-Time
>${maven.build.timestamp}</
Build-Time
>
<
SCM-Revision
>${svn.revision}</
SCM-Revision
>
<
X-Compile-Source-JDK
>${maven.compile.source}
</
X-Compile-Source-JDK
>
<
X-Compile-Target-JDK
>${maven.compile.target}
</
X-Compile-Target-JDK
>
</
manifestEntries
>
</
archive
>
</
configuration
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-war-plugin</
artifactId
>
<
version
>${maven-war-plugin.version}</
version
>
<
configuration
>
<
archive
>
<
manifest
>
<
addDefaultImplementationEntries
>true</
addDefaultImplementationEntries
>
</
manifest
>
<
manifestEntries
>
<
Build-Time
>${maven.build.timestamp}</
Build-Time
>
<
SCM-Revision
>${svn.revision}</
SCM-Revision
>
<
X-Compile-Source-JDK
>${maven.compile.source}</
X-Compile-Source-JDK
>
<
X-Compile-Target-JDK
>${maven.compile.target}</
X-Compile-Target-JDK
>
</
manifestEntries
>
</
archive
>
</
configuration
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-source-plugin</
artifactId
>
<
version
>${maven-source-plugin.version}</
version
>
<
executions
>
<
execution
>
<
id
>attach-sources</
id
>
<
goals
>
<
goal
>jar-no-fork</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-javadoc-plugin</
artifactId
>
<
version
>${maven-javadoc-plugin.version}</
version
>
<
configuration
>
<
locale
>en_US</
locale
>
</
configuration
>
<
executions
>
<
execution
>
<
id
>attach-javadocs</
id
>
<
goals
>
<
goal
>jar</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-deploy-plugin</
artifactId
>
<
version
>${maven-deploy-plugin.version}</
version
>
</
plugin
>
</
plugins
>
<
finalName
>${project.artifactId}-${project.version}-r${svn.revision}-${maven.build.timestamp}</
finalName
>
</
build
>
<
dependencies
>
<
dependency
>
<
groupId
>org.jmock</
groupId
>
<
artifactId
>jmock-junit4</
artifactId
>
<
version
>${jmock.version}</
version
>
<
type
>jar</
type
>
<
scope
>test</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.jmock</
groupId
>
<
artifactId
>jmock-legacy</
artifactId
>
<
version
>${jmock.version}</
version
>
<
type
>jar</
type
>
<
scope
>test</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>junit</
groupId
>
<
artifactId
>junit</
artifactId
>
<
version
>${junit.version}</
version
>
<
scope
>test</
scope
>
</
dependency
>
</
dependencies
>
<!-- 本地artifactory配置
<distributionManagement>
<repository>
<id>central</id>
<name>My Artifactory-releases</name>
<url>http://localhost/artifactory/libs-release-local</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>My Artifactory-snapshots</name>
<url>http://localhost/artifactory/libs-snapshot-local</url>
</snapshotRepository>
</distributionManagement> -->
</
project
>
2、java项目(jar),project1/pom.xml
在parent中声明是上面的pom。这样你的项目本身的pom就瘦身了不少。
可以更加专注的关心你的依赖。
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion
>4.0.0</
modelVersion
>
<
parent
>
<
groupId
>org.noahx</
groupId
>
<
artifactId
>noahx-root</
artifactId
>
<
version
>1.0</
version
>
</
parent
>
<
groupId
>org.noahx.project1</
groupId
>
<
artifactId
>project1-core</
artifactId
>
<
version
>1.0-SNAPSHOT</
version
>
<
packaging
>jar</
packaging
>
<
properties
>
<
spring.version
>3.0.4.RELEASE</
spring.version
>
</
properties
>
<
dependencies
>
<
dependency
>
<
groupId
>org.springframework</
groupId
>
<
artifactId
>spring-core</
artifactId
>
<
version
>${spring.version}</
version
>
</
dependency
>
</
dependencies
>
</
project
>
3、web项目(war),project2/pom.xml
同java一样进行瘦身。
注意packaging是war。wtpContextName这个只对eclipse wtp启作用,自动设置你的web上下文。对myeclipse无效需要手动修改。
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion
>4.0.0</
modelVersion
>
<
parent
>
<
groupId
>org.noahx</
groupId
>
<
artifactId
>noahx-root</
artifactId
>
<
version
>1.0</
version
>
</
parent
>
<
groupId
>org.noahx.project2</
groupId
>
<
artifactId
>project2-web</
artifactId
>
<
version
>1.0-SNAPSHOT</
version
>
<
packaging
>war</
packaging
>
<
properties
>
<
servlet-api.version
>2.4</
servlet-api.version
>
</
properties
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-eclipse-plugin</
artifactId
>
<
configuration
>
<
wtpContextName
>p2</
wtpContextName
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
<
dependencies
>
<
dependency
>
<
groupId
>javax.servlet</
groupId
>
<
artifactId
>servlet-api</
artifactId
>
<
version
>${servlet-api.version}</
version
>
<
scope
>provided</
scope
>
</
dependency
>
</
dependencies
>
</
project
>
4、总结
大家当然还可以定义项目公共的pom继续提炼共性。
noahx-root<--project-root
project-root<--project-core
project-root<--project-ext
一般的开源东西的pom都是一级一级继承下来的。大大减小了pom文件大小。
- 利用Maven继承关系简化项目POM配置
- maven 项目pom配置
- maven项目继承和聚合pom文件配置
- Maven POM文件详解以及继承关系
- 一个maven项目pom配置
- Spring事务支持:利用继承简化配置
- maven中pom.xml文件的继承关系
- java项目中利用maven打war包,其pom配置
- Maven项目pom.xml 配置学习
- maven项目pom.xml配置json包
- maven 项目上传私服pom配置
- Maven项目pom.xml配置详解
- maven项目spring的pom配置
- Maven项目管理配置pom.xml留存
- maven 配置多模块项目 pom modules
- Maven项目的pom.xml配置
- maven配置,pom配置
- spring事务管理----声明式(2)利用继承简化配置
- 图文详解YUV420数据格式
- COPY NAV导航网格寻路(7) -- 代码和一些优化
- UITabBar 自定义
- ios Datepicker 把英文的月份改成中文 设置datepicker的大小
- res://ieframe.dll/acr_error.htm 纯手动解决方法
- 利用Maven继承关系简化项目POM配置
- oracle——(2)Oracle表空间扩展脚本
- 告别2014,迎接新的开始(12月总结)
- How to use ssh proxy to visit openstack code repository (by quqi99)
- ocr文字识别软件应该怎么使用
- 使用VS插件在VS2012/2013上编辑和调试Quick-cocos2d-x的Lua代码
- COPY NAV导航网格寻路 -- 光照射线法
- 51单片机第二弹---独立键盘
- Android原理揭秘系列之View、ViewGroup .