网上类似文档很多,不过都不完整,也没解释一些遇到的棘手问题,特此记录下。
1、首先,构建自己满意的MAVEN架构的WEB开发框架,假设项目目录为d:\pm\mavenproject\web-shav,groupId为com.brother,artifactId为oa,version为1.7.5。
2、进入项目目录d:\pm\mavenproject\web-shav,命令行执行mvn archetype:create-from-project。
3、默认情况下,archetype-metadata.xml文件有许多需要改良的地方,文件在
D:\pm\mavenproject\web-shav\target\generated-sources\archetype\target\oa-archetype-1.7.5.jar中,目录为META-INF\maven。
a、create-from-project目标默认会对架构元数据配置文件中的java文件进行package替换,假设两个类分别为com.portal.pub.utils.AppUtils和com.portal.pub.dao.AppDao,则这两个类的包路径会被修改为
${package}.utils和${package}.dao。这种替换很诡异,我觉得一般情况下都用不上,替换原则也很简单,就是找到所有java文件相同的路径部分替换为${package}。
在archetype-metadata.xml文件中增加如下配置信息,避免创建项目时还要指定包路径的尴尬。
<requiredProperties>
<requiredProperty key="package">
<defaultValue>com.portal.pub</defaultValue>
</requiredProperty>
</requiredProperties>
b、源项目pom.xml文件中的某些依赖包的版本或者artifactId被替换成了${version}和${rootArtifactId},最典型的是如下情况。
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>4.1.7.5</version>
</dependency>
oa-archetype-1.7.5.jar中\archetype-resources\pom.xml中被替换成了
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupl${rootArtifactId}d</artifactId>
<version>${version}</version>
</dependency>
4.1.7.5都能被替换成${version},很郁闷的事情,现在也没什么好办法,archetype生成后仔细查下${}有哪些吧。
4、解决上述问题后,mvn install,安装到maven本地库。
5、mvn archetype:generate -DarchetypeGroupId=com.brother -DarchetypeArtifactId=oa-archetype -DarchetypeVersion=1.7.5 -DgroupId=test -DartifactId=web -Dversion=1.0.0
注意前面几个archetype参数项与D:\pm\mavenproject\web-shav\target\generated-sources\archetype\pom.xml文件中一致,如果没改过,就只是在源artifactId上加了"-archetype"。
6、知道如何通过源项目来构建archetype,要开始进行源项目的一些细节处理。
a、pom.xml文件中packaging要配置成war,这样maven在打包过程会有针对web项目的一些特定逻辑,比如:会将\src\main\webapp下的所有文件打包到war中;会将\src\main\resources下的所有文件复制到war包中的WEB-INF/classes目录;\src\main\java下所有java生成的class复制到war包中的WEB-INF/classes目录。
7、要集成spring、hibernate、ibatis、activiti,进行pom.xml文件的配置,遇到一些问题,记录并贴上解决办法。
a、http://maven.alfresco.com/nexus/content/repositories/activiti仓库以前都是好的,现在有点坑人,不但下载的jar包是有问题的,就连仓库中不存在的jar也会被下载,导致MAVEN不会再去尝试其他远程仓库,
如果没有代理仓库,这里很容易导致各种问题,因为默认的center仓库是放在搜索仓库的最后。
到activiti官方论坛咨询了下,官方回答是仓库有些问题,时好时坏,没办法了,只有自己动手,丰衣足食了。
直接通过浏览器到仓库下载activiti-engine-5.10.jar和activiti-spring-5.10.jar。
以activiti-engine-5.10.jar为例,可以安装到本地仓库。
mvn install:install-file -DgroupId=org.activiti -DartifactId=activiti-engine -Dversion=5.10 -Dpackaging=jar -Dfile=activiti-engine-5.10.jar
考虑到企业内分享,也可以安装到自己的代理仓库。
mvn deploy:deploy-file -DgroupId=org.activiti -DartifactId=activiti-engine -Dversion=5.10 -Dpackaging=jar -Dfile=activiti-engine-5.10.jar -Durl=http://localhost:7777/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty
附上pom.xml文件内容,备份用,不全,切勿使用。
<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>com.brother</groupId>
<artifactId>portal</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>brother portal</name>
<description>This is a portal system, and it will provide the basic structure for web project</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<activiti-version>5.10</activiti-version>
<spring-version>3.1.2.RELEASE</spring-version>
<hibernate-version>4.1.7.Final</hibernate-version>
</properties>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.168</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
</project>