MAVEN入门心得(3)-构建自己的WEB开发框架

网上类似文档很多,不过都不完整,也没解释一些遇到的棘手问题,特此记录下。

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>

猜你喜欢

转载自fortaotao.iteye.com/blog/1233583