部署 maven 的一些要点、遇到的问题和心得体会

(图片看不了,可以下载doc文件)

 

 

 


一、   maven 环境的搭建

1、 下载并配置 maven (可做可不做)

( 1 )到 http://maven.apache.org 下载 maven 的最新版本 , 并解压到某一目录 ( 假设是 d:\apache-maven);

 

( 2 )配置系统环境变量 :PATH 里面加上 d:\apache-maven\bin

( 3 )配置 JAVA_HOME 到 jdk 目录

( 4 )在命令行上输入 : mvn -version; 回车,如看到下面信息表示安装成功:

 

( 5 )在命令行上输入 : mvn help:system; 回车,会在当前用户目录下 (win7 是 C:\Users\ 用户名 ,xp 是 c:\documents and settings\ 用户名 ), 建立 .m2

 

2、 Eclipse 集成 maven

Update site 是 http://m2eclipse.sonatype.org/sites/m2e , 全选安装就好了 , 重启 eclipse.

这样就安装了 eclipse 集成的 maven 插件,但建议使用在第一步下载 maven ,做法如下:进入 Preferences ——》 maven ——》 Installations ,点击“ Add ”添加 maven 的解压路径。

 

 

3 、建立 settings.xml 文件

如果没有做第一部操作,需要自己在当前用户目录下建立 .m2 目录。之后在 .m2 目录下建立 setting.xml 文件 . 注意: 《 maven 基本使用指南 _ 小飞侠版 1.doc 》这个文档的配置是错误的, mvn install 时会提示:连接不了 180.200.3.76:8081 的错误。是 76 服务器的 maven

以下是我的配置,这里需要建立一个私服,在第四点介绍仓库 时会介绍。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0

                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>F:\maven </localRepository>

  <profiles>

    <profile>

             <id>dev</id>

      <repositories>

             <repository>

                                   <id>releases</id>

                                         <url>http://localhost:8888/nexus-2.0.3/content/repositories/releases</url>

                                         <releases><enabled>true</enabled></releases>

                         <snapshots><enabled>true</enabled></snapshots>

                         </repository>      

        <repository>

         <id>central</id>

         <name>Central</name>

         <url>http://localhost:8888/nexus-2.0.3/content/repositories/central/</url>

         <releases><enabled>true</enabled></releases>

         <snapshots><enabled>true</enabled></snapshots>

        </repository>

      </repositories>

    </profile>

  </profiles>

  <activeProfiles>

    <activeProfile>dev</activeProfile>

  </activeProfiles>

         </settings>

其中下面标注为红色的 , 需要修改为自己的一个本地目录 , 以后所有的 jar 包都会放在这个下面 .

我们将项目所需要用到除源代码之外的东西(如 jar 包, tomcat,script 等都放在上面)通过这个文件, MAVEN 会从服务器会拉取 jar 包到本地,如果服务器上的包有更新,也会自动去更新,这样,当框架有新的版本出现时,不再需要我们手动去重新添加 jar 包这么麻烦。

 

二、 网厅环境的搭建 (我配置的是南昌网厅,遇到错误没有成功运行)

1、   检出 entity 、 base 为 java project   ,biz 为 ejb project ,web 为动态网页工程, script 为 javascript project 。都有红叉叉,没事,继续下面的步骤后就好了。

2、   检出完成后对每个工程

         选中项目右键“ Maven —》 Enable Depandency management” ,弹出以下界面:

 

这里需要设置 maven 的坐标,可以参考第四点的坐标 。 Group ID 使用 com.maywide.ibh , artifact Id 是构件的 id ,设置为项目的名称, version 不用管 。 Packaging 除了 web project 用 war 外,其他选 jar

3、   依赖管理。打开项目的 pom.xml 文件添加依赖项。如 biz_nanchang 的依赖配置如下:

< dependencies > 
      < dependency > 
        < groupId > com.maywide.ibh </ groupId > 
        < artifactId > base </ artifactId > 
        < version > 0.0.1 -SNAPSHOT </ version > 
      </ dependency > 
      < dependency > 
        < groupId > com.maywide.ibh </ groupId > 
        < artifactId > entity </ artifactId > 
        < version > 0.0.1 -SNAPSHOT </ version > 
      </ dependency > 
      < dependency > 
        < groupId > com.maywide.ibh </ groupId > 
        < artifactId > lib95 </ artifactId > 
        < version > 1.0 </ version > 
      </ dependency > 
      < dependency > 
        < groupId > com.maywide.ibh </ groupId > 
        < artifactId > lib96 </ artifactId > 
        < version > 1.0 </ version > 
</ dependency >

         添加了对 base 、 entity 项目的依赖。其中 lib95 、 lib96 是 privatelib 的 jar 包。我上传到私服时把它命名成这样了。 Base 、 entity 项目也需要添加对 lib 的依赖项,在私服需要一个个 jar 包上传,所以需要一个个的添加依赖, lib 有 94 个 jar 吧,慢慢加呗。因为 maven 的依赖具有传递性的,所以 biz_nanchang 项目不需要添加对 lib 的 jar 包的依赖。同理, web_nanchang 项目只需要添加对 biz_nanchang 的依赖就可以了。

         之后选择 mvn install 编译。

3 、把 biz_nanchang 和 web_nanchang 项目的 jdk 改成 1.6 。进行 maven 下的操作时经常会把 jdk 给成 1.5 的,要检查一下。

 

4 、添加 maven 的依赖库到 Web Deployment Assembly 。网上说要这样做的,防止找不到 jar 包,不过这一步我没体现到它的用处。

 

 

5 、 Web 工程右键 ->Run as->Maven build, 这时会跳出一个页面:如图:

 

 

在 goals 输入: tomcat:run-war ,

 

在 VM 参数 : 添加

  -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

点击 Apply ,之后 run 就可以执行了。但期间遇到错误 2 、错误 3 和错误 4 。错误 4 没有解决导致网站无法运行。

 

三、我掌握的 maven 的一下知识点。

1 、坐标

         Maven 把项目作为构件,每个构件定义一个坐标,由于区分其他的构件,配置依赖时只需加入这个坐标, maven 会先到本地仓库查找该构件,找不到就到远程仓库查找。

         坐标如下:

com.maywide.ibh

         ArtifactID: 构件的 ID ,一个 project 、模块的 id 。

         Version: 版本号。

         Packaging: 打包的方式。默认是 jar 。 Web project 需要选择 war 。

 

2 maven 的依赖 在 < dependency > 标签里设置,需输入构件的坐标。 Maven

3 、仓库

    仓库是存储构件的地方。 Maven

    ( 1 )本地仓库

    在 setting.xml 的 <localRepository>F:\maven </localRepository> 里面配置本地仓库的位置 ,项目所需的构件会被下载到该目录。如网厅项目,我们可以打开该目录 F:\maven ,可以进入 com 文件夹—》 maywinde 文件夹—》 ibh 文件夹,看到我们的 base 、 entity 、 biz 等项目。

       ( 2 )远程仓库

       远程仓库分为中央仓库和私服。

       中央仓库 是全世界共享的一下常见的构件。

       私服 是一家公司、企业自己建的用于存储构件的的一个 maven 服务器 , 还有它也起到代理中央仓库的作用。目前最多人使用的是用 nexus 搭建 maven 私服。

 

私服的仓库分成 4 类: group (仓库组)、 hosted (宿主)、 proxy (代理)和虚拟( virtual )。 Nexus 默认已经有中央仓库的代理了。只需把下面提供的 url 配置到 setting.xml

 

         我们要使用到的是宿主仓库,用于存放项目的 jar 包。 Maven 提供 Releases 仓库用于存放发布版本的构件; Snapshots 存放快照版本的构件; 3rd party 存放第三方构件。

         选择一个仓库,可以进入以下界面上传构件:

 

 

四、遇到的问题和解决

错误 1 : [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for project biz_zhuhai:biz_zhuhai:jar:0.0.1-SNAPSHOT: Failed to collect dependencies for [com.maywide.ibh:lib345:pom:1.0 (compile)]: Failed to read artifact descriptor for com.maywide.ibh:lib345:pom:1.0: Could not transfer artifact com.maywide.ibh:lib345:pom:1.0 from/to releases (http://localhost:9888/nexus-2.0.3/content/repositories/releases): Connection to http://localhost:9888 refused: Connection refused: connect -> [Help 1]

解决: 这是配置的 url 有错误或者是私服没有配好,导致构件下载时出错。如果没有 jar 包需要在私服里下载,可以不配置私服的,也就是可以把 setting.xml 的 profiles

 

错误  2  : [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project web_nanchang: There are test failures. 
[ERROR]  
[ERROR] Please refer to E:\maven\web_nanchang\target\surefire-reports for the individual test results. 
 
      解决  :这是因为测试代码时遇到错误,它会停止编译。只需要在 pom.xml 的 <project>
<build> 
    <plugins> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
          <testFailureIgnore>true</testFailureIgnore>  
        </configuration> 
      </plugin> 
    </plugins> 
 </build>

         错误 3

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project web_nanchang: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
[ERROR]  
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR]  
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
      解决  : maven 的 web 项目默认的 webroot 是在 src\main\webapp 。如果在此目录下找不到 web.xml 就抛出以上的异常。解决方法在 pom.xml
<build> 
 <finalName>simple-webapp</finalName> 
 <plugins> 
 <plugin> 
 <groupId>org.apache.maven.plugins</groupId> 
 <artifactId>maven-war-plugin</artifactId> 
 <version>2.1.1</version> 
 <configuration> 
 <webResources> 
 <resource> 
 <!-- this is relative to the pom.xml directory --> 
 <directory>WebContent </directory> 
 </resource> 
 </webResources> 
 </configuration> 
 </plugin> 
 </plugins> 
 </build> 
错误 4   : 
2012-4-27 10:36:49 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
严重 : The web application [/web_nanchang] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
还不知道怎样解决,导致运行不了。

错误 5

 

这个感觉怪怪的,遇过几次。把 java complier 改成 1.6 或者 disabled dependency manangent 后在 enable 它,搞着搞着就消失了。

 

五、心得体会:

       这次 maven 的部署用了一个多星期。起初对 maven 不了解,按着小飞侠的文档来部署,但那个文档是 boss2 的,而我配的是网厅项目,部署不成功又不知道什么原因。所以我觉得用 boss2 的配置文档去配置网厅的,应该先弄清楚每一步是什么意思。就比如 boss2 的项目为什么不需要检出 lib 和 privatelib 呢,是因为私服里已经有了 jar 包,而网厅的没有,所以不理解地按着文档搞是白搞的。

       之后我上网找资料,还买了本书,去学习 maven 。结果学习了一些 maven 的知识,知道怎样配私服,还按书本部署了几个简单的项目。但当用到网厅的时候出现一些奇怪的错误,上网找答案,尝试了多种方法解决了一些错误。我觉得一个部署项目好郁闷啊,如果有个人请教一下或者讨论一下,会很高效。


  • 部署maven.rar (411 KB)
  • 下载次数: 0