第一、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. [转载]锁无关的(Lock-Free)数据结构

    锁无关的(Lock-Free)数据结构 在避免死锁的同时确保线程继续 Andrei Alexandrescu 刘未鹏 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也 ...

  2. docker简单介绍(资料收集总结)

    [前言] 首先,感谢我的leader总是会问我很多技术的基本资料,让我这个本来对于各种技术只知道操作命令不关注理论知识的人,开始重视理论资料. 关于docker的操作步骤等等,都是之前学习的,现在补上 ...

  3. scrapy shell 用法(慢慢更新...)

    scrapy shell 命令 1.scrapy shell url #url指你所需要爬的网址 2.有些网址数据的爬取需要user-agent,scrapy shell中可以直接添加头文件, 第①种 ...

  4. acm专题---键树

    题目来源:http://hihocoder.com/problemset/problem/1014?sid=982973 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms ...

  5. python抓取链家房源信息(二)

    试着用scrapy将之前写的抓取链家网信息的重新写了写 然后先是用了第一页的网页作为测试,调试代码,然后发现总是抓取的时候遇见了 类似于这样的问题,并且抓取不到信息 2017-03-28 17:52: ...

  6. golang-goroutine和channel

    goroutine 在go语言中,每一个并发的执行单元叫做一个goroutine 这里说到并发,所以先解释一下并发和并行的概念: 并发:逻辑上具备同时处理多个任务的能力 并行:物理上在同一时刻执行多个 ...

  7. fail2ban安全设置

    1.先安装fail2ban服务包(这里我采用的是fail2ban-0.8.14.tar.gz) 2.解压安装包 cd /data/software tar xzf fail2ban-0.8.14.ta ...

  8. GUC-2 原子性

    import java.util.concurrent.atomic.AtomicInteger; /* * 一.i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写” * int i ...

  9. vue插件集合

    Vue2.0+组件库总结 UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview  ...

  10. ​Web(click and script) 与 Web(HTTP/HTML)协议区别

    Web(click and script) 与 Web(HTTP/HTML)协议区别 webjavascriptvbscript浏览器脚本login 先从最简单的说明上来看, Web(HTTP/HTM ...