1.自定义archetype快速开发的步骤:
一般可先创建所需的maven项目,然后利用archetype plugin的create-from-project将maven项目将该maven项目生成为archetype类型项目。生成maven项目后并确定定型后,执行:
mvn archetype:create-from-project
生成的archetype在此路径下:target\generated-sources
该目录下也会有pom.xml文件,可修改该文件,增加deploy的设置,比如公司有maven repository manager服务器,以后就可以将该archetype部署到公司服务器上,便于其他人使用。比如:
<distributionManagement>
<repository>
<id>releases</id>
<name>MyCo Internal Repository</name>
<url>http://dev.easymorse.com/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>MyCo Internal Repository</name>
<url>http://dev.easymorse.com/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
部署到公司服务器的命令:mvn deploy
假设该archetype项目名为webproto-archetype,那么,其他开发者需要配置自己.m2/settings.xml文件,增加公司的repository信息,比如:
<profiles>
<profile>
<id>easymorse-profile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>easymorse-repo</id>
<url>http://dev.easymorse.com/nexus/content/repositories/releases</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</profile>
然后使用该webproto-archetype,运行下面的示例,将在本地目录下获得一个struts2+hibernate集成的maven项目:
mvn archetype:generate
-DarchetypeGroupId=com.easymorse.dev
-DarchetypeArtifactId=webproto-archetype
-DarchetypeVersion=1.1.0
create-from-project生成的项目一般不能直接使用,还需要手工修改。
比如,create-from-project会自动将xml文件的version的值(1.0)替代为变量占位符,可手工取消该变量,否则在使用该archetype时将被项目的版本值替代。
还有不要用archetype:create,已经标识为Deprecated了,通过它使用archetype,复制文件可能出现乱码。
2.自定义的archetype可以通过maven install安装到本地仓库里,路径与jar包类似.
3.多模块配置 :
<parent>
<groupId>org.springside</groupId>
<artifactId>springside3-parent</artifactId>
<version>3.3.4</version>
</parent>
可以实际上引用的路径为:{本地仓库}/org/springside/springside3-parent/3.3.4/springside3-parent-3.3.4.pom这个pom你文件。
4.顶层父pom中 dependencyManagement 中的 dependencies 与 子pom中的 dependencies 的区别 :
dependencyManagement 中的 dependencies只定义 依赖项版本的优先选择,并不影响项目的依赖项;而 dependencies 元素则影响项目的依赖项。
子pom:
<dependencies >
<dependency >
<groupId>com.devzuz.mvnbook.proficio</groupId>
<artifactId>proficio-model</artifactId>
</dependency >
</dependencies >
这里并没有version值,这个时候,为使其模块 pom 完整,子pom就会到父pom的相应com.devzuz.mvnbook.proficio中找到version值,将版本信息注入其中。只有当 dependencies 元素中没有指明版本信息时, dependencyManagement 中的 dependencies 元素才起作用。