• maven学习3 使用Maven构建项目


    二、创建项目“骨架”

    下面用命名行创建一个最基本的maven项目

    2.1 mvn archetype:generate

    先创建项目的根目录,比如c: est,命令行窗口下输入

    cd /d c: est

    mvn archetype:generate

    首次运行时,mvn会从远程"中央仓库"下载一些必需的文件到"本地仓库" - (如果你有兴趣,可以在等待下载过程中,观察一下"C:Users当前用户名.m2 epository"到底下载了些啥东东)

    ..

    [INFO] Generating project in Interactive mode (这里会卡一会儿,因为要联网获取项目模板)
    [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
    Choose archetype:
    1: remote -> br.com.ingenieux:elasticbeanstalk-service-webapp-archetype (A Maven Archetype Encompassing RestAssured, Jetty, Jackson, Guice and Jersey for Publishing JAX-RS-based Services on AWS' Elastic Beanstalk Service)
    ... (这里会自动列出很多项目模板,每种模板前面会有一个数字序号)

    336: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)

    ...

    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: (这里根据每个人机器上安装的eclipse插件不同,可能默认的数字不是这个,先不管,直接回车)

    Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 
    1: 1.0-alpha-1
    2: 1.0-alpha-2
    3: 1.0-alpha-3
    4: 1.0-alpha-4
    5: 1.0
    6: 1.1
    Choose a number: 6: (直接回车)
    Define value for property 'groupId': : cnblogs (可暂时先理解成类似package或namespace的名称,通常我们填写组织机构名称缩写)
    Define value for property 'artifactId': : maven-hello-world (组件名称,可暂时理解成项目名称)
    Define value for property 'version':  1.0-SNAPSHOT: : (版本号,直接回车,默认1.0-SNAPSHOT)
    Define value for property 'package':  cnblogs: : (打包后的jar文件名,相当于.net中项目最后生成的程序集dll名称)
    Confirm properties configuration:
    groupId: cnblogs
    artifactId: maven-hello-world
    version: 1.0-SNAPSHOT
    package: cnblogs
     Y: :  (直接回车确认)
    [INFO] ----------------------------------------------------------------------------
    [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
    [INFO] ----------------------------------------------------------------------------
    [INFO] Parameter: groupId, Value: cnblogs
    [INFO] Parameter: packageName, Value: cnblogs
    [INFO] Parameter: package, Value: cnblogs
    [INFO] Parameter: artifactId, Value: maven-hello-world
    ...
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS (看到这个,表示项目创建成功!)
    [INFO] ------------------------------------------------------------------------
    ...

    2.2 maven项目的目录结构

    C: estmaven-hello-world>tree
    Folder PATH listing for volume win7
    Volume serial number is AA2C-6E70
    C:.
    ├───src
    │   ├───main
    │   │   └───java
    │   │       └───cnblogs
    │   └───test
    │       └───java
    │           └───cnblogs
    └───target
        └───classes
            └───cnblogs

    注意上面带红色的目录名,maven项目采用“约定优于配置”的原则,src/main/java约定用于存放源代码,src/main/test用于存放单元测试代码,src/target用于存放编译、打包后的输出文件。这是全世界maven项目的通用约定,请记住这些固定的目录结构。

    三、编译项目

    先进入刚才创建项目的根目录

    cd /d c: estmaven-hello-world

    然后执行 mvn clean compile

    这样就能对项目进行编译了,编译后会自动在target目录中生成class文件,如果编译成功,会输出类似下面的信息

    yangjunmingmatoMacBook-Pro-7:maven-hello-world jimmy$ mvn clean compile
    [INFO] Scanning for projects...
    [INFO]                                                                         
    [INFO] ------------------------------------------------------------------------
    [INFO] Building maven-hello-world 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-hello-world ---
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-hello-world ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory /Users/jimmy/Desktop/study/maven-hello-world/src/main/resources
    [INFO] 
    [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ maven-hello-world ---
    [INFO] Compiling 1 source file to /Users/jimmy/Desktop/study/maven-hello-world/target/classes
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.515s
    [INFO] Finished at: Wed Jan 01 19:08:32 CST 2014
    [INFO] Final Memory: 10M/156M
    [INFO] ------------------------------------------------------------------------

    四、单元测试

    mvn clean test

    这样就能做单元测试了,so easy !

    如果单元测试不通过,会提示出错信息,注意看输出。

    注:从输出上可以发现,test前,会先执行compile,即先编译,再执行单元测试.

    有兴趣的朋友,可以修改下/src/test/java/cnblogs/AppTest.java里的内容,把testApp()方法中的assertTrue( true );改成assertTrue( false );再跑下单元测试,看下有什么不同

    五、项目打包

    通常我们会把java项目打包成jar包或war包,maven中打包的命令为

    mvn clean package

    运行完后,会在target目录下生成jar包

    注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包

    六、项目运行

    该项目中的App.java中有main方法,可以直接运行,常规方式下,我们如果想直接运行class文件,得敲一段很长的命令,maven中不必这么复杂,先用记事本打开项目根目录下的pom.xml文件,增加下面这节内容:

    复制代码
     1     <build>
     2         <finalName>${project.artifactId}</finalName>
     3         <plugins>
     4             <plugin>
     5                 <groupId>org.codehaus.mojo</groupId>
     6                 <artifactId>exec-maven-plugin</artifactId>
     7                 <version>1.2.1</version>
     8                 <executions>
     9                     <execution>
    10                         <goals>
    11                             <goal>exec</goal>
    12                         </goals>
    13                     </execution>
    14                 </executions>
    15                 <configuration>
    16                     <executable>java</executable>          
    17                     <arguments>                       
    18                         <argument>-classpath</argument>
    19                         <classpath>
    20                         </classpath>
    21                         <argument>cnblogs.App</argument>
    22                     </arguments>
    23                 </configuration>
    24             </plugin>
    25         </plugins>
    26     </build>
    复制代码

    上述这段内容插入在</project>之前即可。

    然后在命令行下,输入

    mvn exec:exec

    即可直接运行,下面是输出:

    C: estmaven-hello-world>mvn exec:exec
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building maven-hello-world 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- exec-maven-plugin:1.2.1:exec (default-cli) @ maven-hello-world ---
    Hello World!
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.175s
    [INFO] Finished at: Mon Jan 13 22:35:02 CST 2014
    [INFO] Final Memory: 6M/111M
    [INFO] ------------------------------------------------------------------------

    七、项目部署

    如果是web项目,使用命令

    mvn clean jboss-as:deploy

    就能自动将web项目部署到jboss中(前提是jboss web server已经成功启动),因为刚才我们创建的是一个最基本的maven项目,并非web项目,所以执行这条命令,应该会失败,后面会讲如何在eclipse中用插件部署web项目,这里可以先跳过。

    另外:

    有时候,我们的项目是一个类库,只是封装一些方法供其它项目引用,对于这种项目,我们可以用 mvn clean install 把生成的jar包,安装到“本地仓库”中,这样本机其它项目需要使用该jar包时,只要在pom里配置依赖项即可,不用把jar包复制到当前项目中。

    创建一个web的maven示例项目

    File -> New -> Maven Project -> Next ,在接下来的窗口中会看到一大堆的项目模板,Filter栏里输入“jboss-javaee6-webapp-archetype”,参考下图

    然后Next,在接下来的界面中填写groupId之类

    然后Finish完成项目创建。整个过程其实跟前面提到的纯手式命令行完全类似,只不过借助于插件,以图形化的方式更友好而已,直接Finish

    项目上右击->Run As 就能看到很多Maven的选项,顾名思义,如何选择Maven install,等效于命令行执行mvn clean install,其它几项的含义一看便知,一般来讲Maven test 和 Maven install这二个基本上已经够用,如果还想定义自己的命令,比如 maven clean package,可以选择“6 Maven build...”,会弹出一个界面,如下图,在name输入框填写名称:maven-web-sample-package(名字可以随便写,只要方便自己记忆就行),Goals栏输入clean package

    最后点击Run关闭这个窗口,以后可以直接从工具栏调出这个选择,如下图:

    实际使用中,发现eclipse与maven之间并非整合得天衣无缝,有时候eclipse中项目图标经常会莫名其妙的出现一些红叉,以下是一些个人经验:

    a) 尝试先到Dos命令行窗口,用mvn clean compile(或install)之类的命令试下能否正常编译

    b) 如果a) 步骤能正常编译,在回到eclipse中,项目右击->Maven-Update Project ,通常这样就能消除红叉

    c) 有时候b)步骤操作完以后,仍然会有红色感叹号或红叉,但是eclipse编译、调试都OK,这就要具体问题具体分析了,可以尝试把Problems面板调出来,逐个分析

    d) 以上3个步骤都尝试无效后,最后还可以尝试 Windows -> Preferences -> Validation -> Disable All 把所有验证都关掉

    配置项目 需要添加src/main/java,src/test/java ,src/test/resources三个文件夹。右键项目根目录点击New -> Source Folder,建出这三个文件夹

            注意:不是建普通的Folder,而是Source Folder

    7、更改class路径 右键项目,Java Build Path -> Source 下面应该有4个文件夹。src/main/java,src/main /resources,src/test/java ,src/test/resources

            选上Allow output folders for source folders

            双击每个文件夹的Output folder,选择路径

            src/main/java,src/main/resources,选择target/classes;

            src/test/java ,src/test/resources, 选择target/test-classes;        

            在此处还要更改:更改文件夹显示的顺序:点击Order and Export;更改JDK版本:在Libraries双击JRE System Library,要1.6版本

     

    把项目变成Dynamic Web项目 右键项目,选择Project Facets,点击Convert to faceted fro

  • 相关阅读:
    父div不会被子div撑高
    ie6兼容问题
    浏览器兼容性技巧
    css hack基本语法
    网站设置为灰色
    .net cookie跨域请求指定请求域名
    实体对象属性和值转为键值对Dictionary
    C#通过对象属性名修改值
    jQuery.noConflict()解决imgBox.js依赖jquery版本问题
    华为OJ之最长公共子序列
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7446106.html
Copyright © 2020-2023  润新知