之前在一个公司接触了一个项目,框架师用到了maven,作为一个小公司的码农,新事物总是令人神往,恰值周末,在iteye看到一篇文章。个人惯例,原作者博客地址:http://jackycheng2007.iteye.com/
本文是接着前面的一片继续记录maven的学习笔记:
法宝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,你就可以自定义一些变量了,哈哈。
相关推荐
使用SnuggleTeX将LaTeX方程式转换为MathML的Maven Mojo 原始的html文件假定位于./help-gen 。 具有转换文件的目录被复制到./target/latex2mathml 。 <plugin> <groupId>no.marintek.sima</groupId> <artifactId...
maven-jaxb2-plugin-0.14.0 下载 maven包 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB...
将 Maven 依赖项转换为 Gradle 的非常基本的网页。 目前只解析 groupId、artifactId 和 version。 范围被忽略。 如果使用版本变量,它将保留它,但您仍然需要在 build.gradle 文件中定义该变量 例子: 这 - ...
maven项目转换为eclipse项目所需要的包。
<artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> 2:在springweb.xml中加入: <bean class="org.springframework.web.servlet.mvc.annotation....
Spring Boot Starter ACME ... <id>maven-snapshots</id> <url>http://oss.sonatype.org/content/repositories/snapshots</url> <layout>default</layout> <releases> <enabled>false</enabled
ascii2native-maven-plugin 将 ASCII 编码的文本文件转换为本机。 输出示例 [INFO] --- ascii2native-maven-plugin:1.4-SNAPSHOT:ascii2native (ascii2native) @ express-api --- [INFO] Ascii2Native: Process ...
Maven yaml 插件将 Java .properties 文件转换为 .yaml 文件。 代码需要重构,然后我会发布插件。
内容 插件功能 该插件具有两种不同的功能,可以分别组合/使用。 能力#1(主要炊具) 将过滤器选择生成(FSG)功能/场景转换为最小的执行片段 ...< dependency> < groupId>com.github.manjunathprabhakar</ groupId>
<artifactId>jpinyin</artifactId> <version>1.1.8</version> </dependency> Gradle Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories: ...
mybatis-1-3-7自动生成工具修改版源码--maven项目 1、实体类添加注释。 2、mapper.xml去掉jdbcType类型转换 3、修改文件名mapper.java修改为IDAO.java 4、提取BaseDao,修改dao层接口自动继承。考虑是否生成Example类...
<artifactId>json2json</artifactId> <version>0.3.2</version> </dependency> <dependencies> 在仓库下 <repository> <id>anc-releases</id> <url>...
OWL2VOWL转换器 开发依赖 我们在Maven Central中有一个发布库,但其中存在该版本,因此不会经常更新。 因此,我建议使用来获取最新发行版本(例如master分支... <artifactId>OWL2VOWL</artifactId> <version>master-
OpenApi 3插件 目录 问题 4.3。... < groupId>hu.icellmobilsoft.jaxb</ groupId> < artifactId>openapi-jaxb</ artifactId> < version>1.1.0</ version> </ dependency> 2. openapi-jaxb插件 swa
Java中常用的html转图片功能依赖包,包含html2image 0.9 和 2.0.1两个版本。因为Maven中央仓库中不再提供html2image包,故通过Maven无法下载。 <dependency> <groupId>gui.ava</groupId> <artifactId>html2image</...
精通RTree RTree是支持为任意范围... <dependency> <groupId>com.conversantmedia</groupId> <artifactId>rtree</artifactId> <version>1.0.5</version></dependency>(可选)为您的Java版本指定分类器分类器jdk8 jdk10
SM2加密算法签名(超全,亲测可用),需要依赖包,maven项目可以在pom.xml中引入<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.54</version> </...
< artifactId>json2flat</ artifactId> < version>1.0.3</ version> </ dependency> 例子 String str = new String ( Files . readAllBytes( Paths . get( " /path/to/source/file.json " ))); JFlat flatMe = ...
BatchPreparedStatementSetter, 就可以批量update通过一个对PO对象删除对应的数据库记录依然可以使用原始的JdbcTemplate目前只在mysql上测试.Maven 依赖<dependency> <groupId>org.crazycake</groupId> ...
<artifactId>flyway-maven-plugin</artifactId> <version>4.2.0</version> <configuration> <user>root</user> <password>你的数据库密码</password> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:...