`
bazhuang
  • 浏览: 147589 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

maven创建工程

    博客分类:
  • java
阅读更多
下面介绍一下如何利用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] ------------------------------------------------------------------------
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics