第一、main目录下的主代码编写完毕后,使用Maven进行编译,在项目根目录下运行命令mvn clean compile

      行项目编译。
第二、test目录下的测试用例编写完毕之后就可以调用Maven执行测试,运行mvn clean test进行测试。
第三、将项目进行编译、测试之后,下一个重要步骤就是打包(package)。在pom.xml中定义
      <packaging>war</packaging>标签表示将要把工程打成什么类型的包(默认是jar类型),我们可以简单地
      执行命令mvn clean package进行打包。
第四、war插件的war目标将项目主代码打包成一个名为<artifactId>S3h3WebWs</artifactId>标签中的定义-
      <version>0.0.1-SNAPSHOT</version>标签中的定义.war的文件
      (最终的jar文件是S3h3WebWs-0.0.1-SNAPSHOT.war),该文件也位于target/输出目录中,它是根据
      artifact-version.jar规则进行命名的,如有需要,我们还可以使用finalName来自定义该文件的名称。
第五、至此,我们得到了项目的输出,如果我们把项目打成了jar文件并且需要在其他项目中使用的话,就可以
      复制这个jar文件到其他项目的Classpath中从而使用这个项目中的类。但是,如何才能让其他的Maven项
      目直接引用这个jar呢?我们还需要一个安装的步骤,执行mvn clean install命令。
第六、我们已经将体验了Maven最主要的命令:mvn clean compilemvn clean test
     mvn clean packagemvn clean install。执行test之前是会先执行compile的,执行package之前是
      会先执行test的,而类似地,install之前会执行package。
第七、如果项目中有一个拥有main方法的类需要被调用执行。默认打包生成的jar是不能够直接运行的main方法
      的,因为带有main方法的类信息不会添加到manifest中(我们可以打开jar文件中的META-INF/MANIFEST.MF
      文件,将无法看到Main-Class一行)。为了生成可执行的jar文件,我们需要借助maven-shade-plugin插
      件,配置该插件如下:
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                           <mainClass>com.todaytech.framework.utils.VoConvertXmlUtils</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
     </plugin>
 
     plugin元素在POM中的相对位置应该在<project><build><plugins>下面。我们配置了mainClass
     为com.todaytech.framework.utils.VoConvertXmlUtils ,项目在打包时会将该信息放到MANIFEST中。现
     在执行 mvn clean install,待构建完成之后打开target/目录,我们可以看到
     S3h3WebWs-0.0.1-SNAPSHOT.jar和original-S3h3WebWs-0.0.1-SNAPSHOT.jar,前者是带有Main-Class信息
     的可运行jar,后者是原始的jar,打开hello-world-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看      到它包含这样一行信息:Main-Class: com.todaytech.framework.utils.VoConvertXmlUtils
     现在,我们在项目根目录中执行该jar文件:
     D: \code\S3h3WebWs>java -jar target\S3h3WebWs-0.0.1-SNAPSHOT.jar
     Hello Maven
     控制台输出为Hello Maven,这正是我们所期望的。
第八、使用maven archetype来创建该项目的骨架,离开当前的Maven项目目录。
      如果是Maven 3,简单的运行:
      mvn archetype:generate
      如果是Maven 2,最好运行如下命令:
      mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
      很多资料会让你直接使用更为简单的 mvn archetype:generate 命令,但在Maven2中这是不安全的,因为
      该命令没有指定archetype插件的版本,于是Maven会自动去下载最新的版本,进而可能得到不稳定的
      SNAPSHOT版本,导致运行失败。然而在Maven 3中,即使用户没有指定版本,Maven也只会解析最新的稳定
      版本,因此这是安全的。
      我们实际上是在运行插件maven-archetype-plugin,注意冒号的分隔,其格式为
      groupId:artifactId:version:goal,org.apache.maven.plugins是maven官方插件的groupId,
      maven-archetype-plugin是archetype插件的artifactId,2.0-alpha-5是目前该插件最新的稳定版,
      generate是我们要使用的插件目标。
      紧接着我们会看到一段长长的输出,有很多可用的archetype供我们选择,包括著名的Appfuse项目的
      archetype,JPA项目的archetype等等。每一个archetype前面都会对应有一个编号,同时命令行会提示一
      个默认的编号,其对应的archetype为maven-archetype-quickstart,我们直接回车以选择该archetype,
      紧接着Maven会提示我们输入要创建项目的groupId、artifactId、 version、以及包名package。
--------------------------------------------------------------------------------------------------

生成清除Eclipse项目结构:
mvn eclipse:eclipse
mvn eclipse:clean

清理(删除target目录下编译内容):
mvn clean

仅打包Web页面文件:
mvn war:exploded

打包时跳过测试:
mvn package -Dmaven.test.skip=ture

跳过测试运行maven任务:

mvn -Dmaven.test.skip=true XXX

创建Maven的普通java项目(只适用于Maven2.x版本): 
mvn archetype:create -DgroupId=packageName -DartifactId=projectName

创建Maven的Web项目(只适用于Maven2.x版本):

mvn archetype:create  -DgroupId=packageName -DartifactId=webappName DarchetypeArtifactId=maven-archetype-webapp

创建Maven的Web项目(只适用于Maven3.x版本):

C:\Documents and Settings\Administrator>f:
F:\>cd F:\SoftWare\Maven\MavenWebAppTest
F:\SoftWare\Maven\MavenWebAppTest>mvn archetype:generate -DgroupId=com.shihuan -DartifactId=S3h3WebWs -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

创建Maven的Quickstart项目(只适用于Maven3.x版本):

C:\Documents and Settings\Administrator>f:
F:\>cd F:\SoftWare\Maven\MavenWebAppTest
F:\SoftWare\Maven\MavenWebAppTest>mvn archetype:generate -DgroupId=com.shihuan -DartifactId=S3h3WebWs -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
 
 
查看详细日志信息命令:
mvn archetype:create -Dgroupid=com.shihuan -Dartifactid=S3h3WebWs -e -DarchetypeArtifactid=maven-archetype-webapp
或者
mvn archetype:create -Dgroupid=com.shihuan -Dartifactid=S3h3WebWs -X -DarchetypeArtifactid=maven-archetype-webapp

编译源代码: mvn compile

编译测试代码:mvn test-compile
运行测试:mvn test
生成站点目录: mvn site
生成站点目录并发布:mvn site-deploy
安装当前工程的输出文件到本地仓库: mvn install
安装指定文件到本地仓库:mvn install:install-file -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=1.0.0 -Dpackaging=jar -Dfile=<myfile.jar>
查看实际pom信息: mvn help:effective-pom
分析项目的依赖信息:mvn dependency:analyze 或 mvn dependency:tree
查看帮助信息:mvn help:help 或 mvn help:help -Ddetail=true
查看插件的帮助信息:mvn <plug-in>:help,比如:mvn dependency:help 或 mvn ant:help

生成eclipse项目:mvn eclipse:eclipse

生成idea项目:mvn idea:idea

组合使用goal命令,如只打包不测试:mvn -Dtest package

只打jar包: mvn jar:jar

只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
 

在pom.xml文件中增加servlet容器的插件:

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.6</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

启动tomcat:

mvn tomcat:run

启动jetty:

mvn jetty:run

转化为eclipse项目:

mvn -Dwtpversion=1.5 eclipse:eclipse

这样生成wtp插件的web项目。

打开eclipse,菜单选择:file>import>general>existing projects into workspace,在对话框中选中目录,导入即可。

另外,需要在eclipse里创建一个classpath变量,名称为:M2_REPO,值为系统用户下.m2/repository目录。

packaging : 打包的格式可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par

POM间关系: 依赖关系(dependencies)、继承关系(parent)、聚合关系(modules)。

依赖关系举例:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>

继承关系举例:
继承其他pom.xml配置的内容。
maven提供了一个类似java.lang.Object的顶级父pom.xml文件。
可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:mvn help:effective-pom
创建一个各种项目可复用的pom.xml文件:http://easymorse.googlecode.com/svn/trunk/pom/pom.xml
部署要复用的pom.xml文件:mvn install。 
在自己的pom文件中继承上述pom:
<parent>
<groupId>com.easymorse</groupId>
<artifactId>pom</artifactId>
<version>0.1</version>
</parent>

聚合关系举例:
用于将多个maven项目聚合为一个大的项目。
比如目录结构如下:
.
|-- pom.xml
|-- module-a
`-- pom.xml
|-- module-b
`-- pom.xml
|-- module-c
`-- pom.xml
|-- foo-all
`-- pom.xml 那么总的pom.xml文件类似:
...
<modules>
<module>module-a</module>
<module>module-b</module>
<module>module-c</module>
<module>foo-all</module>
</modules>
</project>

把项目部署到tomcat下的做法:

tomcat配置有管理权限的用户:conf\tomcat-users.xml。 
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <user username="marshal" password="password" roles="manager"/>
</tomcat-users>
 
在pom文件的tomcat插件中添加:
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>tomcat-maven-plugin</artifactId>
    <configuration>
        <url>http://localhost:8080/manager</url>
        <server>myserver</server>
        <path>/mycontext</path>
    </configuration>
</plugin>
 
在.m2/settings.xml文件中增加:
<settings 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/settings-1.0.0.xsd">
        <servers>
            <server>
                <id>myserver</id>
                <username>marshal</username>
                <password>password</password>
            </server>
        </servers>
</settings>
 
运行打包部署,在maven项目目录下: 
mvn tomcat:deploy
 
然后访问:http://localhost:8080/mycontext/ 即可。
撤销部署: 
mvn tomcat:undeploy
 
启动web应用:
mvn tomcat:start
 
停止web应用:
mvn tomcat:stop
 
重新部署:
mvn tomcat:redeploy
 
部署展开的war文件: 
mvn war:exploded tomcat:exploded
 
--------------------------------------------------------------------------------------
pom是指project object Model。pom是一个xml,在maven2里为pom.xml。是maven工作的基础,在执行task或者goal时,maven会去项目根目录下读取pom.xml获得需要的配置信息
pom文件中包含了项目的信息和maven build项目所需的配置信息,通常有项目信息(如版本、成员)、项目的依赖、插件和goal、build选项等等。
pom是可以继承的,通常对于一个大型的项目或是多个module的情况,子模块的pom需要指定父模块的pom。
project pom文件的顶级元素。
modelVersion 所使用的object model版本,为了确保稳定的使用,这个元素是强制性的。除非maven开发者升级模板,否则不需要修改。
groupId 是项目创建团体或组织的唯一标志符,通常是域名倒写,如groupId  org.apache.maven.plugins就是为所有maven插件预留的。
artifactId 是项目artifact唯一的基地址名。
packaging artifact打包的方式,如jar、war、ear等等。默认为jar。这个不仅表示项目最终产生何种后缀的文件,也表示build过程使用什么样的<a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings" target="_blank">lifecycle</a>。
version artifact的版本,通常能看见为类似0.0.1-SNAPSHOT,其中SNAPSHOT表示项目开发中,为开发版本。
name 表示项目的展现名,在maven生成的文档中使用。
url表示项目的地址,在maven生成的文档中使用。
description 表示项目的描述,在maven生成的文档中使用。
dependencies 表示依赖,在子节点dependencies中添加具体依赖的groupId artifactId和version。
build 表示build配置。
parent 表示父pom。
其中groupId:artifactId:version唯一确定了一个artifact。

Artifact
这个有点不好解释,大致说就是一个项目将要产生的文件,可以是jar文件,源文件,二进制文件,war文件,甚至是pom文件。每个artifact都由groupId:artifactId:version组成的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(见Repository)中。 Repositories
Repositories是用来存储Artifact的。如果说我们的项目产生的Artifact是一个个小工具,那么Repositories就是一个仓库,里面有我们自己创建的工具,也可以储存别人造的工具,我们在项目中需要使用某种工具时,在pom中声明dependency,编译代码时就会根据dependency去下载工具(Artifact,供自己使用。
对于自己的项目完成后可以通过mvn install命令将项目放到仓库(Repositories)中
仓库分为本地仓库和远程仓库,远程仓库是指远程服务器上用于存储Artifact的仓库,本地仓库是指本机存储Artifact的仓库,对于windows机器本地仓库地址为系统用户的.m2/repository下面。 Build Lifecycle
是指一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle
Build Lifecycle是由phases构成的,下面重点介绍default Build Lifecycle几个重要的phase:
validate 验证项目是否正确以及必须的信息是否可用;
compile 编译源代码;
test 测试编译后的代码,即执行单元测试代码;
package 打包编译后的代码,在target目录下生成package文件;
integration-test 处理package以便需要时可以部署到集成测试环境;
verify 检验package是否有效并且达到质量标准;
install 安装package到本地仓库,方便本地其它项目使用;
deploy 部署,拷贝最终的package到远程仓库和替他开发这或项目共享,在集成或发布环境完成 以上的phase是有序的(注意实际两个相邻phase之间还有其他phase被省略,完整phase见lifecycle),下面一个phase的执行必须在上一个phase完成后
若直接以某一个phase为goal,将先执行完它之前的phase,如mvn install
将会先validate、compile、test、package、integration-test、verify最后再执行install phase。 Goal
goal代表一个特定任务
A goal represents a specific task (finer than a build phase) which contributes to the building and managing of a project.  如
mvn package表示打包的任务,通过上面的介绍我们知道,这个任务的执行会先执行package phase之前的phase
mvn deploy表示部署的任务
mven clean install则表示先执行clean的phase(包含其他子phase),再执行install的phase。

Maven编译代码的相关命令的更多相关文章

  1. Maven编译代码的时候跳过单元测试

    Maven编译代码的时候跳过单元测试 <properties> <maven.test.skip>true</maven.test.skip> </prope ...

  2. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  3. maven的相关命令

    maven的相关命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码(编译到target文件夹中) mvn test-compile :编译测 ...

  4. 使用Maven编译运行Storm入门代码(Storm starter)(转)

    Storm 官方提供了入门代码(Storm starter),即 Storm安装教程 中所运行的实例(storm-starter-topologies-0.9.6.jar),该入门代码位于 /usr/ ...

  5. 一个简单的dos脚本, svn 获取代码 - Tomcat 备份 - Maven 编译 - 停止/启动Tomcat - Tomcat站点 发布

    获取最新代码 svn update --username %SVN_USER% --password %SVN_PASSWORD% >> "../%LOG_FILE%" ...

  6. geoserver源码maven编译相关问题

    1.登陆失败跳转404错误 登陆失败后指向的路径为: http://192.168.15.97:8080/hgisserver/web/wicket/bookmarkable/org.geoserve ...

  7. git 提代码时的相关命令,Mark一下

    以前用命令提代码都是复制粘贴,现在换了工作后,特别是回退代码的命令又忘了,去网上查了好久,心累.特此Mark一下 1. 打patch: 1.1 git diff >> ljh.patch ...

  8. C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序

    本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序. □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass. ...

  9. 使用maven将代码到私服

    在上一节中,我们讲述了maven私服搭建 ,那么本章,我们讲述如何使用maven将代码打包并上传到maven私服上. 一.maven pom.xml关键配置信息. <distributionMa ...

随机推荐

  1. loadrunner 测试问题汇总

    1.关于Error -27791: Error -27790:Error -27740:        错误如下:        Action.c(198): Error -27791: Server ...

  2. 关于Hazard Pointers的话题

    关于Hazard Pointers的话题, 起源于这个文章: 实现无锁的栈与队列(4) http://www.cnblogs.com/catch/p/3176636.html 其实他的系列文章(3)之 ...

  3. Hashtable之Properties

    properties的使用:1.Hashtable的实现类,线程安全.与HashMap不同,Hashtable不允许使用null作为key和value2.和HashMap一样,Hashtable也不能 ...

  4. HDU3974 Assign the task(多叉树转换为线段+线段树区间染色)

    题目大意:有n个人,给你他们的关系(老板和员工),没有直属上司的人就是整个公司的领导者,这意味着n个人形成一棵树(多叉树).当一个人被分配工作时他会让他的下属也做同样的工作(并且立即停止手头正在做的工 ...

  5. windows 下安装 nginx + php

    1. 下载软件 需要的软件有nginx,php,mysql(如不需要可不安装) nginx.org,www.php.net上面有得下 全部解压出来 php基本不用做任何修改(下载直接解压版本的) 用c ...

  6. Robot Framework 快速入门

    Robot Framework 快速入门 目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键 ...

  7. mvc3 RenderAction传参问题

    我在viewA中调用部分视图viewB代码如下:@{Html.RenderAction("NewsList","News",new{pageSize=13, c ...

  8. thinkphp5.0读取配置

    读取配置参数 设置完配置参数后,就可以使用get方法读取配置了,例如: echo Config::get('配置参数1'); 系统为get方法定义了一个助手config,以上可以简化为: echo c ...

  9. 《java虚拟机》----垃圾收集、内存分配

    No1: 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作.每一个栈帧中分配多少内存基本上市在类结构确定下来时就已知的,因 ...

  10. Python类总结-继承-子类和父类,新式类和经典类

    子类和父类 class Father(object): #子类在使用super调用父类时,Father后面要加object --新式类 def __init__(self): self.Fname = ...