本文是接着前面的一片继续记录maven的学习笔记:[url]http://jackycheng2007.iteye.com/blog/923791
[/url]
法宝2. POM 项目对象模型 - 继续
Project Inheritance - 项目继承
前面说到了项目在maven里被看成是object,既然如此,肯定有继承的功能。这个功能很有用,等于是让我们的项目profile也能被重用。试想,如果你有很多相似的项目,比如采用ssh开发的一系列项目,你的每个项目的pom里面肯定有不少重复的部分。有了继承,你就可以把这些公用的部分都抽取出来,然后每个子项目再继承,从而达到重用的目的。本来嘛,继承就是反应了is-a的关系,一个supper项目下面的子项目天生就和supper项目有is-a的关系吧。这样也不算滥用继承了,哈哈。
怎么继承呢?
接着上篇文章的最后一个例子,如果他下面有个子模块需要继承它的话:
<project>
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-module</artifactId>
</project>
这个子模块就继承了父模块的groupid和version等信息。等一下,这里有个问题。就凭
<groupId>com.mycompany.app</groupId>,子模块怎么找到supper的pom啊?
是的,如果supper项目已经安装在local的repository里面了或者supper的pom在约定的目录,也就是子模块的上一级目录(如下),就可以。
引用
my-app|-- my-module
| `-- pom.xml
`-- pom.xml
那么,如果不巧,这两条都不是呢?比如:
引用
.
|-- my-module
| `-- pom.xml
`-- parent
`-- pom.xml
那我们还可以自己指定位置:
<project>
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
<relativePath>.../parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-module</artifactId>
</project>
Project Aggregation - 项目集合
通过项目继承,我们再管理或者构建子项目的时候就能从用parent项目的pom。反过来呢?如果我们要构建一个完整的项目,是不是经常需要集合多个子项目来打包呢。Project Aggregation就是解决这个问题的。
怎么做呢?得满足两点:
引用
父项目的pom里面的packaging的值设为 "pom" .
在父项目的pom里面自定子项目的目录
如果我们想把my-module集合到my-app里面,做如下的修改:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
<packaging>pom</packaging>
<modules>
<module>my-module</module>
</modules>
</project>
上面,没有写路径,也是因为如果遵循maven的目录约定。如果不是那就得写:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
<packaging>pom</packaging>
<modules>
<module>../my-module</module>
</modules>
</project>
可见,约定是一种很好的方式,可以节省代码,也容易形成共识。
Project Interpolation and Variables - 使用变量
有可能在pom里面你会在多处用到同一个字符串片段,比如路径。meven支持变量的声明和引用,这样你就可以防止hard code了。
怎么引用变量?看看下面:
<version>${project.version}</version>
$符号加上大括号,用点来分级访问。很方便。如果有继承关系,会采用子类的值。
有哪些可用的变量呢?
Project Model Variables
pom里面的任何单值元素都可以被当做变量来引用,比如:
引用
${project.groupId}, ${project.version}, ${project.build.sourceDirectory}
Special Variables
${basedir}, 当前项目所在目录
${project.baseUri}, 当前项目所在目录URI. Since Maven 2.1.0
${maven.build.timestamp}, 项目build的开始时间. Since Maven 2.1.0-M1
Properties
你也可以把pom里面定义的Properties当成变量来引用。
<project>
...
<properties>
<mavenVersion>2.1</mavenVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>${mavenVersion}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>${mavenVersion}</version>
</dependency>
</dependencies>
...
</project>
通过Properties,你就可以自定义一些变量了,哈哈。
分享到:
相关推荐
apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-...
apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-...
apache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9....
apache-maven-3.8.8.zip压缩包内容: apache-maven-3.8.8-bin.tar.gz apache-maven-3.8.8-bin.zip apache-maven-3.8.8-src.tar.gz apache-maven-3.8.8-src.zip
maven资源 apache-maven-3.3.9-bin.zip
apache-maven-3.9.6-bin
apache-maven-3.6.3-bin.zip maven3,6版本, 可用apache-maven-3.6.3-bin.zip maven3,6版本, 可用apache-maven-3.6.3-bin.zip maven3,6版本, 可用apache-maven-3.6.3-bin.zip maven3,6版本, 可用apache-maven-3.6.3-...
maven-deploy-plugin-2.8.2.jar
方式2 新建配置(MAVEN_HOME),路径为是解压后的maven根目录,再在path中引用(%MAVEN_HOME%\bin),然后在cmd命令窗口中输入mvn -v,看是否有maven版本输出,有则配置正确。 注意maven3.3.9版本后,需要jdk版本是...
maven-jar-plugin-3.1.1.jar
Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。 压缩包内容: apache-maven-3.8.1-bin.zip、 apache-maven-3.8.1-bin.tar.gz...
maven-shared-utils-3.2.1.jar
apache-maven-3.6.1-bin
maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。...
maven-antrun-plugin-3.0.0.jar
maven-clean-plugin-3.1.0.jar
apache-maven-3.5.3.jar包,apache-maven-3.5.3.jar包
maven-install-plugin-2.4.jar
maven-repository-metadata-3.0.jar