maven构建java项目、web项目
maven构建java项目、web项目
一、mvn构建web项目
1安装mvn(包括path)
2命令:mvn archetype:create -DgroupId=cn.edu.sdau.neat -DartifactId=Project -DarchetypeArtifactId=maven-archetype-webapp
其中,archetype是mvn内置的一个插件,create任务可以创建一个java项目骨架,DgroupId是软件包的名称,DartifactId是项目名,DarchetypeArtifactId是可用的mvn项目骨架,目前可以使用的骨架有:
{* maven-archetype-archetype
* maven-archetype-j2ee-simple
* maven-archetype-mojo
* maven-archetype-portlet
* maven-archetype-profiles (currently under development)
* maven-archetype-quickstart
* maven-archetype-simple (currently under development)
* maven-archetype-site
* maven-archetype-site-simple
* maven-archetype-webapp}
我只使用过最后一个骨架,每一个骨架都会建相应的目录结构和一些通用文件。至于mvn的完整目录结构定义,可参考:
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
如果在项目中有servlet/jsp,推荐jetty容器,它可做为一个插件嵌入到mvn中,使用时,只需要在pom.xml中加入:
chenheng
org.mortbay.jetty
maven-jetty-plugin
使用:mvn jetty:run
就可以在浏览器中测试了,非常方便。
3结合eclipse
mvn eclipse:clean
mvn eclipse:eclipse
普通 Eclipse 项目执行 : mvn eclipse:eclipse Eclipse
web 项目执行 : mvn eclipse:eclipse –Dwtpversion=1.0
4.eclipse导入创建的web项目问题
在用eclipse导入web项目时 如果eclipse安装了wtp插件在会自动将其转化为eclipse认得到的web项目,在项目上面点击右键run as 的run on server可以用,但是当eclipse没有安装wtp插件时run on server则不用,此时的解决方式为用命令行切换到项目的根目录然后执行
mvn eclipse:eclipse –Dwtpversion=1.0即可解决。
src/test/java
src/main/java
src/main/resources
文章来源:http://niuzhenxin.iteye.com/blog/1558418
-------------------------------------------------------------------------------------------------------------------------------------------
二、mvn构建java项目
来源:http://www.cnblogs.com/joycel/archive/2010/05/05/1727681.html
为什么要用Maven
Maven的工作原理
POM构造
Maven在项目中的使用
构建项目目录
配置类型 |
命 令 |
JSF Basic |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Spring MVC Basic |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Struts 2 Basic |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Tapestry Basic |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-tapestry -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
JSF Modular |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-jsf -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Spring MVC Modular |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Struts 2 Modular |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-struts -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Tapestry Modular |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-tapestry -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
Core |
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-core -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 |
修改POM文件
添加工程属性
生成项目站点
其他mvn 命令
Maven是一个用于项目代码管理的开源产品,主页http://maven.apache.org。在项目中使用maven的好处有:统一项目成员的开发环境,统一管理项目类库,就不必每人都手动添加项目开发需要的包了,设置项目间的继承、依赖关系,编译、打包、发布项目,生成项目信息站点,利用插件自动执行junit,checkstyle,pmd测试和检查,并生成报告在项目信息站点上。
如果以上种种都不够吸引你在项目中使用maven的话,那么可以就此打住,不必往下看了。下面要说的是maven的工作原理:maven主要通过每个项目制定的pom.xml文件来管理项目的各种信息和特性。POM是Project Obejct Model的缩写,maven把每个项目看成一个对象,通过pom.xml来定义这个对象的属性。每个项目都有自己的pom.xml,这样项目间的继承和依赖在pom.xml就表现为对象的继承和依赖,这点特别适合大型项目的部署。Maven还内置了一个super pom,所有的pom都继承自这个super
pom,这样即使项目的pom.xml里看起来没有定义什么特性,这个项目也能执行基本的build逻辑。而当项目定义了自己的build逻辑时,就会自动覆盖父类POM的相应逻辑。
一个基本的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.cdc</groupId>
<artifactId>CDCProject</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>CDCProject</name>
<build>
<directory>target</directory>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<outputDirectory>build</outputDirectory>
<testOutputDirectory>build/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
<repositories>
</repositories>
<dependencies>
</dependencies>
<properties>
</properties>
</project>
其中黑色部分的是需要根据项目情况自己定义的内容。简单来说,project根节点下有build,dependencies, repositories等节点内容,其中build指定项目的构造信息及build逻辑,dependencies存放项目依赖的jar包的信息,repositories指定下载这些包的仓库地址。除了这些,还可以添加licenses,organization,issueManagement,distributionManagemen,pluginrepositories等元素指定项目其他相关信息,具体请参考http://maven.apache.org/ref/current/maven-model/maven.html。
对POM Model有了一定了解之后,我们就可以开始maven开发项目管理之旅了。
首先要安装配置maven。Maven安装配置的文章网络上一搜一大把 ,这里我就不赘述了,最重要的是把.M2变量指定到本地的repository目录上就可以了。
安装好maven后,我们就可以用mvn archetype:create命令在workspace下创建一个项目目录。如要创建一个名为myapp的项目名,它有一个名为com.mycompany.app的包,则应在dos下进入workspace目录,运行 mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=myapp ,这就生成了一个项目目录,有如下内容:
+src
+main
+java
+com
+mycompany
+app
+test
+java
+com
+mycompany
+app
pom.xml
如果觉得这个目录结构太简单了,不能满足项目需要,可以使用Appfuse插件生成更有针对性地目录结构。下面是生成各种配置类型的目录结构所使用的maven命令(要求2.0.6以上版本):
当然,Appfuse的妙用肯定不止这些,它的代码生成工具可以生成绝大部分我们需要的代码,如 dao 类,service 类,增删改查的 web 页面、配置文件等,有兴趣的同学可以自己研究一下。
自动生成的POM文件肯定是有一些未明确的地方,这就需要我们手动修改了,指定项目的其他信息,build规则,依赖包信息和下载地址等等。
首先我们看看,pom.xml都还提供了哪些用于描述项目信息的元素:
<project>
<!—在继承的情况下 描述上层POM -->
<parent>
<artifactId>...</artifactId>
<groupId>...</groupId>
<version>...</version>
</parent>
<!-- POM Module 版本-->
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<!--在子类Module 存在的情况下,packaging设置为pom,利用 <modules> 连接子Module;否则packaging设置为jar,无需<modules> 元素 -->
<modules>
<module>...</module>
<module>...</module>
</modules>
<packaging>pom</packaging>
<!—描述项目的开发管理系统-->
<issueManagement>
<system/>
<url/>
</issueManagement>
<!—描述项目的continuous integration system-->
<ciManagement>
...
</ciManagement>
<!—描述项目的版本控制工具,如cvs,svn等-->
<scm>
...
</scm>
<!—用于指定所有子项目共同依赖的包-->
<dependencyManagement>
<dependencies>
<dependency>
...
</dependency>
</dependencies>
</dependencyManagement>
<!—用于指定部署Application 的地址-->
<distributionManagement>
<repository>
...
</repository>
</distributionManagement>
<!—用于项目所使用的属性的定义,使用时就可以用${destdir}来取得/EP的值,并且此属性可以被继承了该POM的子POM取得-->
<properties>
<destdir>/EP</destdir>
...
</properties>
<!—用于指定 Source 文件位置,Resource 位置,编译好的 Class 文件位置等-->
<build>
...
</build>
<!—用于指定相应phase触发时执行的build动作-->
<profiles>
...
</profiles>
<!—用于指定下载第三方包的远程仓库地址-->
<repositories>
<repository>
...
</repository>
</repositories>
<!—用于指定下载第三方插件的远程仓库地址-->
<pluginRepositories>
<pluginRepository>
...
</pluginRepository>
</pluginRepositories>
<!—用于指定项目所依赖的第三方包的信息-->
<dependencies>
<dependency>
...
</dependency>
</dependencies>
<!—用于指定项目自动生成报告的内容-->
<reporting>
...
</reporting>
</project>
以build之前的大多数信息都会体现在用maven生成的项目站点上。下面我们来看看build的定义。maven的很多功能都是由插件提供的,这也不例外。
<build>
<!—- 似乎没什么必要重新指定,生产的项目站点html会放在这个目录下 -->
<directory>target</directory>
<!—- SourceDirectory 和testDirectory 默认使用的是标准目录结构,即src/main/java和src/test/java,如果不是使用标准目录结构则需要重新指定 -->
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<!—- 编译后的class存放的地址 -->
<outputDirectory>build</outputDirectory>
<testOutputDirectory>build/test-classes</testOutputDirectory>
<!—- 指定项目的source目录 -->
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>
<plugins>
<!—用ant插件执行build任务 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<!—- id可以随便取,不重复就行,phase必须是指 mvn 命令名称 -->
<id>clean</id>
<phase>clean</phase>
<!—- 插件使用时的配置信息 -->
<configuration>
<tasks>
<!—- 以下任务描述的标记语法和ant的一样 -->
<delete>
<fileset dir="${destdir}/WebApp/WEB-INF/">
<include name="**/**"/>
</fileset>
</delete>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<tasks>
<native2ascii src="src/resources"
dest="${project.build.outputDirectory}/resources" encoding="UTF-8"
includes="**/*.base" ext=".properties" />
<delete>
<fileset dir="${project.build.outputDirectory}/resources">
<include name="**/*.base"/>
</fileset>
</delete>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<!—- 指定插件执行时所依赖的包 -->
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<scope>system</scope>
<version>1.5</version>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.6.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
</plugin>
<!-- 编译用的插件,利用这它在低版本的jdk的情况下也可以编译-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
接着,再来看看maven最具特色的jar包管理。pom.xml文件中根元素下的dependencies元素就是用于描述项目所依赖的类库信息的,格式如下:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
其中<scope> 参数指定了该类库什么时候使用,有以下 5 种:
l compile : 默认的范围 ,在编译时装载Class Path .
l provided : 和 compile 类似, 显示由 JDK 或 container 提供.
l runtime : 在编译时不需要,但是Application 执行时必要. 测试或Application 执行时装载 ClassPath ,但是编译时就不装载 ClassPath.
l test : 一般状态下是没有必要的,测试编译,或是测试时必要的.
l system : 除了以明细标记 jar 文件以外和 provided 类似.
Maven对第三方包的管理类是以一种集中管理的方式存在的。maven目录下的repository目录可以看成一个第三方包的仓库,以名字和版本号为路径存放各种jar包及其pom.xml文件。也就是说maven的类库管理实际上是把每个jar报都当成一个 POM来看,这样当项目要使用某个包时,只要在项目的pom.xml文件中指定这个包的POM所定义的artifactId和版本信息就可以了,不必像以前那样把包复制到项目文件夹中。当机器上有多个项目时,就可以节省了不少复制来复制去的包所占用的空间,为项目瘦身了不少。开发时的classpath也可以根据pom.xml来生成,这就绝对统一了开发人员间所用到的第三方包的版本。
当生成classpath或者编译项目时,Maven都先在本地repository里groupId, artifactId,version指定的路径下下载必要的 Library,如上面这个例子的包就会在repository\javax\servlet\jstl\1.1.2\下下载 。而网络上也有一些服务器提供这样的repository,如http://www.ibiblio.org/maven2和ttp://maven-plugins.sourceforge.net。如果本地仓库上没有,maven就会连接到这样的远程仓库的相应目录进行下载。这样就需要指定远程仓库的地址了:
<repositories>
<repository>
<id>internal</id>
<name>Maven Repository Switchboard</name>
<layout>default</layout>
<url>http://109.52.20.29/internal</url>
</repository>
<repository>
<id>central</id>
<name>Maven Plugin Repository Mirror</name>
<url>http://www.ibiblio.org/maven2</url>
<layout>default</layout>
</repository>
<repository>
<id>sourceforge</id>
<name>Sourceforge Plugin Repository Mirror</name>
<url>http://maven-plugins.sourceforge.net</url>
<layout>default</layout>
</repository>
</repositories>
项目常用的包在远程仓库上一般都有,但是公司内部的包要想通过远程仓库让开发人员下载的话,就需要建立一个内网的repository,也根据名字和版本号放上要用的包及其pom.xml文件。安装第三方包的命令是:
mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar -Dfile=jta.jar
其中Dfile指定目前这个包的存放路径,这样就会自动根据groupId,artifactId和version在本地repository下构建路径和pom.xml。
如果内网的远程仓库jar包比较全的话,就把它放在repositories节点下的第一个,毕竟内网的下载速度是要快些的嘛。
mvn archetype:create命令生成的项目目录还不能称之为工程,因为这个目录下还缺少.project文件。如果是用eclipse开发的话,就在工程目录下执行mvn eclipse: eclipse。上一步我们修改好这个目录下的pom.xml后,maven就可以根据这个文件定义的dependencies来生成.classpath和 .project文件了。到此项目的构建就算完成了,开发人员就可以用这个环境进行开发了。
用mvn site命令可以根据项目的信息生成项目站点,其中就包括了我们之前在pom.xml里设置的项目相关信息和reporting元素定义的测试和检查的报告。maven 提供的针对如 junit , checkstyle , pmd 等的插件,都能够方便的进行测试和检查并能直接生成报告。具体使用可以在 http://maven.apache.org/plugins/index.html 找到。
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>
maven-project-info-reports-plugin
</artifactId>
<inherited>true</inherited>
<reportSets />
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>
config/sun_checks.xml
</configLocation>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
</plugin>
</plugins>
</reporting>
开发过程中,可能用到的其他mvn 命令有:
l validate : 检查 Project 里Setting 的信息是否可用。
l compile : 编译源代码。
l test : 用junit测试编译好的 Source Code 。
l package : 把编译好的源代码打包。
l integration-test : 根据环境打包,并进行集成测试。
l verify : 检查package 正确执行与否,可否使用,packaging 条件是否齐全。
l install : 把package打好的包发布到本地 repository 。这样别的项目就可以使用这个包了。
l deploy : 把package打好的包发布到远程仓库。这样其他开发人员就可以下载这个包了。
maven构建java项目、web项目的更多相关文章
- Gradle学习之构建java与web项目
一.使用Gradle的java插件构建Java项目 1)Gradle插件包含了若干个接口定义和已有的任务项,语法结构:apply plugin:'插件名' ,此处我们定义插件 apply plugin ...
- 使用maven构建基本的web项目结构
由于当前公司在组织进行项目基本结构的整理,将以前通过eclipse/ ant 方式构建的项目向maven上迁移,于是便进行maven项目方面的调研. 对于maven项目,基本的结构已经在标准文件中: ...
- maven构建简单的web项目
把jdk给换掉 项目修改好了以后写个页面测试一下,结果正常 下面应该添加依赖让web项目一步步丰满起来. 0-添加依赖 1-建一个servlet 2-web.xml中添加servlet声明 3-重新运 ...
- 使用maven构建第一个web项目
在eclipse中,正常创建maven项目后,发现在index.jsp中会报错,此时在pom.xml中加入如下依赖关系即可 <dependency> <groupId>java ...
- Maven实现项目构建直接部署Web项目到Tomcat
Maven实现项目构建直接部署Web项目到Tomcat配置如下: 1.Tomcat的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <ro ...
- Java-Maven-Runoob:Maven 构建 Java 项目
ylbtech-Java-Maven-Runoob:Maven 构建 Java 项目 1.返回顶部 1. Maven 构建 Java 项目 Maven 使用原型 archetype 插件创建项目.要创 ...
- 使用Maven构建RichFaces 4.x项目
使用Maven构建RichFaces 4.x项目 目录 开始之前 第一步 - 创建Maven项目 第二布 - 添加依赖文件 第三步 - 配置RichFaces 第四步 - 创建显示页面 开始之前 本文 ...
- Maven构建真正的J2EE项目
今天同事问起我眼下用Maven构建的多模块项目架构和曾经用Eclipse创建的Web项目的问题.以下将讲一下使用maven搭建多模块的J2ee项目,以及採用这样的方式搭建项目对日后项目的水平拆分和垂直 ...
- 使用Apache Tomcat Maven插件部署运行 Web 项目
什么是Apache Tomcat Maven Plugin? Maven Plugin 是Apache Tomcat 提供的一个Maven插件,它可以在你没有tomcat容器时将任何一个war项目文件 ...
随机推荐
- URL 截取参数 正则
用处很多,记录下. function getvl(name) { var reg = new RegExp("(^|\\?|&)"+ name +"=([^&am ...
- 事件总线EventBus
什么是事件总线管理? 将事件放到队列里,用于管理和分发: 保证应用的各个部分之间高效的通信及数据,事件分发: 模块间解耦: 什么是EventBus? EventBus是发布/订阅的事件总线.Event ...
- java 回文字符串
package string.string1_5; public class Palindrome { /** * 从两头向中间移动 * @param str * @return */ public ...
- A20 烧录和启动 log
用 LiveSuit 烧写了一个 lubuntu 的映像文件到板子上, 同时接了串口观察烧录过程的串口打印信息, 如下 ES: FES:Fes Ver: 098 FES:=============== ...
- spring2实现定时任务的一种方式
1. 在项目中放入Spring的jar包 2. applicationContext.xml的<beans xmlns>部分,添加context相关内容: <beans xmlns= ...
- Ubuntu 13.10上用户怎样获得root权限,用户怎样获得永久root权限,假设配置root登录
一.用户怎样获得root权限: 1. 进入terminal 2. 输入sudo passwd root 并设置password,提示要你输入两次password.自己设定password,一定要 ...
- 个人开发者帐号--我是如何实现在另一台mac上真机调试的
本文转载至 : http://blog.csdn.net/chenyong05314/article/details/8689534 注:本人有一台mac电脑,之前申请开发者帐号的时候直接就是在这 ...
- EasyRTMP内置进入摄像机中实现网络推流直播摄像机的功能
本文转自博客:http://blog.csdn.net/jinlong0603/article/details/57468084 在前面的<如何用传统摄像机实现直接对接平台,类似于海康萤石.大华 ...
- asp.net 列表控件
web空间类都被放置在System.Web.UI.WebControls命名空间下1.ListBox ListBox控件用于创建多选的下拉列表,而可选项是通过ListItem元素来定义的.示例代码如 ...
- Pipeline(netty源码)
精进篇:netty源码死磕6 巧夺天工--Pipeline模式揭秘 1. 巧夺天工--Pipeline模式揭秘 1.1. Pipeline模式简介 管道的发名者叫,Malcolm Douglas M ...