maven创建工程

下面介绍一下如何利用maven来创建多model的工程:

我们的目标是创建一个demo工程,其包括3个子工程,demo.domain,demo.orm,demo.web,其中domain是存放Service代码,orm是存放数据库操作代码,web是存放controller以及页面相关的代码。打包的时候直接将其打成一个demo.war,直接发布使用。
创建一个普通的java项目可以使用以下命令:
mvn archetype:create -DgroupId=com.demo -DartifactId=demo -Dversion=1.0.0 -DarchetypeGroupId=org.apache.maven.archetypes
我们就可以创建一个普通的java project,进入demo目录,可以看到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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>demo</artifactId>
<packaging>jar</packaging>
<version>1.0.0</version>
<name>demo</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

我们的目的是想在demo中创建一个多项目的工程。一个demo.domain、demo.orm、demo.web,然后通过上面创建的这个工程将其管理起来。
那我们同样利用命令:mvn archetype:create -DgroupId=com.demo -DartifactId=demo.domain -Dversion=1.0.0 -DarchetypeGroupId=org.apache.maven.archetypes,就可以创建一个demo.domain这个项目。然后依样画葫芦可以创建一个demo.orm,创建demo.web的时候需要多添加一个参数,指定该工程为一个webapp,命令如下:
mvn archetype:create -DgroupId=com.demo -DartifactId=demo.web -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-webapp

然后我们将demo.orm,demo.domain,demo.web下的pom.xml打开,里面增加:
	……
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>demo</artifactId>
<groupId>com.demo</groupId>
<version>1.0.0</version>
</parent>
……

然后把这些工程移动到demo目录下,打开demo目录下的pom.xml文件,添加如下代码:
	……
<url>http://maven.apache.org</url>
<modules>
<module>demo.web</module>
<module>demo.domain</module>
<module>demo.orm</module>
</modules>
……

这样就把这些工程的结构定义好了,demo为父工程,demo.domain,demo.orm,以及demo.web就是其子工程。

接下来还需要对demo中的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>demo</name>
<url>http://maven.apache.org</url>
<modules>
<module>demo.web</module>
<module>demo.domain</module>
<module>demo.orm</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

主要就是将packaging的内容修改为pom。

还有就是修改demo.web下的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>demo</artifactId>
<groupId>com.demo</groupId>
<version>1.0.0</version>
</parent>
<groupId>com.demo</groupId>
<artifactId>demo.web</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>demo.web Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.9</version>
<configuration>
<contextPath>/demo</contextPath>
<scanIntervalSeconds>3</scanIntervalSeconds>
<scanTargetPatterns>
<scanTargetPattern>
<directory>src/main/webapp</directory>
</scanTargetPattern>
</scanTargetPatterns>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-verbose </compilerArgument>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

这里就是修改了build节点,第一处是指定了编译后的war包的名称为demo.war,第二处的plugin是指定编译的jdk版本为1.5。
还需要指定一下maven编译时候使用的编码,如果不指定的话,就会利用操作系统默认的编码,这样编译的java代码执行时候会出现乱码。
所以需要在pom.xml文件中指定编译时候使用的编码,以及资源文件的编码。
需要修改pom.xml中的build节点,增加如下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

就是在指定了编译使用的jdk版本之后,添加encoding节点配置,然后再增加maven-resources-plugin插件配置就可以了。
如上配置,java文件编译就完全没有问题了。
完整的示例代码如附件所示

最后我们执行一下mvn package命令,就可以打包部署了:
D:\example\demo>mvn package
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] demo
[INFO] demo.web Maven Webapp
[INFO] demo.domain
[INFO] demo.orm
[INFO] ------------------------------------------------------------------------
[INFO] Building demo
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [site:attach-descriptor {execution: default-attach-descriptor}]
[INFO] ------------------------------------------------------------------------
[INFO] Building demo.web Maven Webapp
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] [compiler:compile {execution: default-compile}]
[INFO] No sources to compile
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\example\demo\demo.web\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] No sources to compile
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [war:war {execution: default-war}]
[INFO] Packaging webapp
[INFO] Assembling webapp[demo.web] in [D:\example\demo\demo.web\target\demo]
[INFO] Processing war project
[INFO] Copying webapp resources[D:\example\demo\demo.web\src\main\webapp]
[INFO] Webapp assembled in[47 msecs]
[INFO] Building war: D:\example\demo\demo.web\target\demo.war
[INFO] ------------------------------------------------------------------------
[INFO] Building demo.domain
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\example\demo\demo.domain\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\example\demo\demo.domain\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: D:\example\demo\demo.domain\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.demo.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D:\example\demo\demo.domain\target\demo.domain-1.0.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] Building demo.orm
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\example\demo\demo.orm\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to D:\example\demo\demo.orm\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\example\demo\demo.orm\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to D:\example\demo\demo.orm\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: D:\example\demo\demo.orm\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.demo.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D:\example\demo\demo.orm\target\demo.orm-1.0.0.jar
[INFO]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] demo .................................................. SUCCESS [1.547s]
[INFO] demo.web Maven Webapp ................................. SUCCESS [1.218s]
[INFO] demo.domain ........................................... SUCCESS [0.766s]
[INFO] demo.orm .............................................. SUCCESS [1.937s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Tue Jul 21 15:39:21 CST 2009
[INFO] Final Memory: 16M/29M
[INFO] ------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值