`
log_cd
  • 浏览: 1098603 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

在Eclipse中调试Maven项目

阅读更多
一、命令
   注意以下命令必须在pom.xml文件所在的目录中运行。
  1. --mvn help:effective-pom 查看项目的有效POM
  2. --mvn test:运行应用程序中的单元测试
  3. --mvn package:依据项目生成jar文件
  4. --mvn install:在本地Repository中安装jar
  5. --mvn site:生成项目相关信息的网站
  6. --mvn clean:清除目标目录中的生成结果
  7. --mvn eclipse:eclipse:生成Eclipse项目文件
  8. --mvn compile:编译相应的java文件
  9. --mvn test-compile:只编译test
  10. --mvn archetype:create 创建Maven项目
  11. --mvn -Dplugin=groupId:artifactId help:describe 查看一个插件所用的版本
  12. --mvn -Dmaven.test.skip=true 忽略编译test
  13. --mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true maven的一个插件,安装到本地库

说明:"-D<name>=<value>"这种格式不是Maven定义的,它其实是Java用来设置系统属性的方式,可以通过“java -help”查看Java的解释。Maven的bin目录下的脚本文件仅仅是把属性传入Java而已。
二、运行web项目(mvn jetty:run)
   使用maven的一个方便之处是可以使用Jetty Plugin来运行web项目。只要maven jetty:run就可以把web项目跑起来了。把Maven作为外部工具来用。
   在Run->Externel Tools->Open Externel Tools Dialog.. 打开配置对话框,选中左边的Program节点,右键选择New然后再右边的配置里面输入Name信息,在Main tab下的Location选择你maven可执行文件的全路径(eg:/home/rory/apps/apache-maven-2.0.9/bin/mvn.bat),Working Directory选择你的maven项目(eg:${workspace_loc:/guice-example}),Arguments里输入mvn的命令参数jetty:run。
补充:为eclise添加一个变量:从菜单条,选择Window>Preferences,选择Run/Debug>String Substitution,增加一个新的变量,比如maven_exec,value为mvn.bat的路径。当你设置新的外部装载器(丛菜单条,选择Run>External Tools,选择Program),你可以在位置字段引用刚才定义的maven_exec。
三、m2eclipse插件
    m2eclipse插件为Eclipse提供了Maven的集成。m2Eclipse同时也以挂钩的方式连接了Subclipse插件和Mylyn插件特性。Subclipse插件为m2eclipse提供了与Subversion仓库交互的能力,Mylyn插件为m2eclipse提供了与任务集中接口交互的能力,该接口能跟踪开发过程的上下文。
    要安装m2Eclipse插件,你需要符合一些先决条件。你需要运行Eclipse 3.2或更高版本,JDK 1.4或更高版本,你需要确认Eclipse是在JDK上运行而不是JRE。在你有了Eclipse和兼容的JDK之后,你需要安装两个Eclipse插件:Subclipse和Mylyn。
1.安装 Subclipse
Subclipse 1.2: http://subclipse.tigris.org/update_1.2.x
2. 安装 Mylyn
要安装集成了JIRA支持的Mylyn,添加Mylyn Extras的Eclipse更新URL,如果你的组织使用Atlassian's JIRA来跟踪问题,你会需要这么做。使用下面的更新站点来安装Mylyn:
Mylyn (Eclipse 3.3): http://download.eclipse.org/tools/mylyn/update/e3.3
Mylyn (Eclipse 3.4): http://download.eclipse.org/tools/mylyn/update/e3.4
Mylyn Extras (JIRA 支持): http://download.eclipse.org/tools/mylyn/update/extras
3.安装 AspectJ Tools Platform (AJDT)
   如果你正在安装m2eclipse的0.9.4版本,你可能同时也想要安装Web Tools Platform (WTP) 和 AspectJ Development Tools (AJDT)。使用如下的eclipse更新URL以安装AJDT。
AJDT (Eclipse 3.3): http://download.eclipse.org/tools/ajdt/33/update
AJDT (Eclipse 3.4): http://download.eclipse.org/tools/ajdt/34/dev/update
4.安装 Web Tools Platform (WTP)
要安装Web Tools Platform (WTP)。使用如下的eclipse更新URL,或者直接在Discovery站点中寻找Web Tool Project,该站点应该已经在你的Eclipse远程更新站点列表中了。
WTP: http://download.eclipse.org/webtools/updates/
5.安装 m2eclipse
一旦你已经安装好这些先决条件,你从如下的Eclipse更新URL安装m2eclipse插件:
m2eclipse 插件: http://m2eclipse.sonatype.org/update/
如果你想要安装最新的该插件的快照开发版本,你应该使用如下的开发更新URL而非之前的URL。
m2eclipse 插件 (开发快照): http://m2eclipse.sonatype.org/update-dev/
说明:如果用update方式装最新版本,则不需要进行2/3/4步的操作了,在第5步上起完成。
提示:
(1)使用 -Dmaven.repo.local=xxx 来为每个构建定义唯一的本地仓库。
(2)开启 -Dsurefire.useFile=false 。能让surefire打印测试失败到标准输出。在settings.xml中开启<properties><surefire.useFile>true</surefire.useFile></properties>。
(3)在构建中开启 -B(batch,批处理)模式。这会让日志变短,因为这避免了依赖下载过程的日志。这也能确保构建不会因为等待用户输入而挂起。
(4)开启 -e 能让Maven在遇到构建异常的时候产生完全的堆栈跟踪信息。这让我们更容易根据构建失败结构的日志或者email中理解问题,而不用重新构建一次。
(5)开启 -U 让Maven总是最检查新的snapshot。该选项同样也可以在CI系统的setting.xml中开启。
(6)dependency的scope参数说明:
--compile:默认值。表明是所有任务所需的资源
--test:运行所有的测试用例时所需资源
--runtime:表明是运行时所需资源
--provided:JDK部分或应用服务器的classpath所需的资源
--system:类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它
(7)配置编译选项/Surefire忽略单元测试失败
<plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-compiler-plugin</artifactId>  
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
     <configuration>
       <testFailureIgnore>true</testFailureIgnore>
     </configuration>
    </plugin>
</plugins>

四、Maven的生命周期 (Lifecycle)
  1. validate:验证工程是否正确,所有需要的资源是否可用。
  2. compile:编译项目的源代码。
  3. test-compile:编译项目测试代码。
  4. test:使用已编译的测试代码,测试已编译的源代码。
  5. package:已发布的格式,如jar,将已编译的源代码打包。
  6. integration-test:在集成测试可以运行的环境中处理和发布包。
  7. verify:运行任何检查,验证包是否有效且达到质量标准。
  8. install:把包安装在本地的repository中,可以被其他工程作为依赖来使用
  9. deploy:在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
  10. generate-sources:产生应用需要的任何额外的源代码,如xdoclet。

五、Maven坐标 (Coordinates)
  Archetype插件通过名字为pom.xml的文件创建了一个项目。这就是项目对象模型(POM),一个项目的声明性描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者Maven POM里的一个插件。
  groupId, artifactId, version和packaging。这些组合的标识符拼成了一个项目的坐标,就像任何其它的坐标系统,一个Maven坐标是一个地址,即“空间”里的某个点:从一般到特殊。当一个项目通过依赖,插件或者父项目引用和另外一个项目关联的时候,Maven通过坐标来精确定位一个项目。
  • groupId :团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。
  • artifactId :在groupId下的表示一个单独项目的唯一标识符。
  • version :一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记。
  • packaging :项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。

说明:
(1)项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有同样的groupId, artifactId和version标识的项目。
(2)Maven插件和目标 (Plugins and Goals) :一个Maven插件是一个单个或者多个目标的集合。一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行。一个目标是Maven中的一个“工作单元(unit of work)”。
常常用速记符号:pluginId:goalId。例如,当提到Archetype插件的create目标的时候,我们写成archetype:create。
六、配置Maven的本地仓库目录
1、命令行直接加参数的方式
maven [cmd] -Dmaven.home.local=D:/MavenRepo/.maven
2、在用户HOME目录下创建build.properties文件,内容为,注意/或者用\\,用\不行的。
maven.home.local=D:/MavenRepo/.maven
build.properties也可以放在项目路径下
3、修改%MAVEN_HOME%\lib\maven.jar里的defaults.properties文件,将
maven.home.local = ${user.home}/.maven
修改为
maven.home.local = D:/MavenRepo/.maven
4、项目里的project.properies里加上一句
maven.repo.local=D:/MavenRepo/.maven
七、优化POM
1.上移共同的依赖至dependencyManagement
如果多于一个项目依赖于一个特定的依赖,你可以在dependencyManagement中列出这个依赖。父POM包含一个版本和一组排除配置,所有的子POM需要使用groupId和artifactId引用这个依赖。如果依赖已经在dependencyManagement中列出,子项目可以忽略版本和排除配置。
2.为兄弟项目使用内置的项目version和groupId
使用{project.version}和${project.groupId}来引用兄弟项目。兄弟项目基本上一直共享同样的groupId,也基本上一直共享同样的发布版本。使用${project.version}可以帮你避免前面提到的兄弟版本不一致问题。
八、优化插件
   大部分复杂的Maven多模块项目倾向于在顶层POM中定义所有的版本。这个顶层POM就成了影响整个项目的更改焦点。将版本号看成是Java类中的字符串字面量,如果你经常重复一个字面量,你可能会将它定义为一个变量,当它需要变化的时候,你就只需要在一个地方更改它。并且可以在顶层POM中管理(pluginManagement)插件配置,就像我们在顶层POM中使用dependencyManagement片段管理依赖一样。如:
<project>
  ...
  <properties>
    <hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version>
    <hsqldb.version>1.8.0.7</hsqldb.version>
  </properties>
<build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>hibernate3-maven-plugin</artifactId>
          <version>2.1</version>
          <configuration>
            <components>
              <component>
                <name>hbm2ddl</name>
                <implementation>annotationconfiguration</implementation>
              </component>
            </components>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>hsqldb</groupId>
              <artifactId>hsqldb</artifactId>
              <version>${hsqldb.version}</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>  
   ...
</project>

   Maven Dependency插件能够帮助你发现对于依赖的直接引用。
$ mvn dependency:analyze
dependency:tree目标,该目标会列出项目中所有的直接和传递性依赖。
$ mvn dependency:tree


附:Debugging with the Maven Jetty Plugin in Eclipse
Step 1
Go to the Run/External Tools/External Tools ..." menu item on the "Run" menu bar. Select "Program" and click the "New" button. On the "Main" tab, fill in the "Location:" as the full path to your "mvn" executable. For the "Working Directory:" select the workspace that matches your webapp. For "Arguments:" add jetty:run.

Move to the "Environment" tab and click the "New" button to add a new variable named MAVEN_OPTS with the value:

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y

If you supply suspend=n instead of suspend=y you can start immediately without running the debugger and launch the debugger at anytime you really wish to debug.

Step 2

Then, pull up the "Run/Debug/Debug ..." menu item and select "Remote Java Application" and click the "New" button. Fill in the dialog by selecting your webapp project for the "Project:" field, and ensure you are using the same port number as you specified in the address= property above.

Now all you need to do is to Run/External Tools and select the name of the maven tool setup you created in step 1 to start the plugin and then Run/Debug and select the name of the debug setup you setup in step2.

From instructions provided by Rolf Strijdhorst on the Maven mailing list

Stopping Jetty

In order to stop the jetty server the "Allow termination of remote VM" should be checked in debug dialog in Step 2. When you have the jetty server running and the debugger connected you can switch to the debug perspective. In the debug view, right click on the Java HotSpot(TM) Client VM[localhost:4000] and  chose terminate. This will stop the debugger and the jetty server.
分享到:
评论
1 楼 shermenn 2011-07-12  

相关推荐

    在eclipse中使用maven(1).zip

    在Eclipse中使用Maven是Java开发者日常工作中的一项重要技能,Maven是一个强大的项目管理和构建工具,它简化了项目的依赖管理、构建流程以及版本控制。本教程将详细讲解如何在Eclipse环境中配置和使用Maven。 1. **...

    eclipse导入maven项目报错解决办法

    在开发过程中,我们常常会遇到使用Eclipse导入Maven项目时出现的各种报错情况。本文旨在系统地介绍如何解决这些常见问题,包括但不限于配置环境、设置JDK版本、配置Maven库以及解决各种依赖问题等。 #### 一、准备...

    eclipse-maven3-plugin

    5. **调试支持**:通过插件,可以直接在 Eclipse 中调试 Maven 构建脚本,这对于解决构建问题非常有帮助。 6. **目标视图**:在 Eclipse 的“Maven”视图中,可以看到所有可用的 Maven 目标,并可直接运行它们,...

    如何在eclipse jee中创建Maven project并且转换为Dynamic web project

    通过以上步骤,你就能在Eclipse JEE环境中成功创建一个Maven项目并将其转换为Dynamic Web Project,从而方便地进行Java Web应用的开发和调试。记住,维护好`pom.xml`文件是确保项目可构建和依赖管理的关键。同时,...

    Eclipse中Maven插件

    在Maven的`pom.xml`中配置调试端口,并在Eclipse的Debug配置中指定相应的端口,即可实现远程调试Maven应用。 8. **插件管理**:Maven的强大之处在于其丰富的插件生态系统,通过POM文件可以配置使用特定的Maven插件...

    使用Eclipse构建Maven项目

    在项目的pom.xml文件中,Maven的主配置文件,我们将定义项目的坐标(groupId, artifactId, version)和其他关键信息,如项目依赖。例如,如果我们的项目是一个Web应用,我们可能需要添加Servlet API的依赖。此外,还...

    Eclipse使用Maven构建web项目视频教程

    本教程聚焦于如何在Eclipse集成开发环境中利用Maven来构建Web项目,旨在帮助初学者快速上手,但不涉及特定的框架如Spring或Struts。 **一、Maven简介** Maven是一款强大的项目管理和综合工具,它简化了构建、依赖...

    eclipse-maven内置

    对于包含多个子模块的Maven项目,Eclipse提供了良好的支持,可以在一个父项目下管理所有子模块,方便进行整体构建和调试。 **8. Maven构建配置** 用户可以在Eclipse的“Run Configurations”中为特定的Maven目标...

    maven项目转换WEB项目

    3. **设置Web内容目录**:在项目属性中,确保“Web Content”指向`src/main/webapp`目录,这是Maven Web项目的默认Web资源位置。 4. **配置服务器**:在Eclipse中添加并配置你需要的Web服务器,例如Tomcat或Jetty,...

    使用Eclipse构建Maven的Web项目

    在IT行业中,Eclipse是一款广泛使用的Java集成开发环境(IDE),而Maven则是一个强大的项目管理工具,主要用于构建、管理和依赖管理。这篇博客"使用Eclipse构建Maven的Web项目"将详细介绍如何利用Eclipse创建并配置...

    eclipse的maven插件

    Eclipse的Maven插件是开发环境中不可或缺的一部分,它使得在Eclipse IDE中管理Maven项目变得简单而高效。Maven是一种项目管理和综合工具,基于约定优于配置的原则,用于自动化构建、依赖管理和项目信息管理。它通过...

    在Eclipse中Tomcat和Maven插件相互配合进行热部署

    在Eclipse中,Tomcat和Maven插件的相互配合是开发Java Web应用程序时不可或缺的工具。这个过程涉及到了源码管理和自动化构建工具Maven,以及集成开发环境Eclipse中的服务器适配器Tomcat,它们共同助力实现项目的热...

    maven Integration for Eclipse

    "Maven Integration for Eclipse",简称m2eclipse,是Eclipse集成开发环境中的一个强大插件,旨在帮助开发者无缝地在Eclipse中管理和构建基于Maven的Java项目。这个插件的引入极大地简化了传统Eclipse中对于Maven...

    eclipse-maven3-plugin.zip

    这个插件使得开发者能够在Eclipse环境中无缝地管理Maven项目,包括构建、依赖管理和生命周期操作。在Eclipse中安装并配置m2e插件后,开发人员可以享受到以下功能和优势: 1. **项目导入与创建**:m2e插件允许用户...

    maven eclipse 插件下载

    当我们需要在Eclipse中进行Maven项目的开发时,就需要将Maven集成到Eclipse中,这就是"Maven Eclipse插件"的作用。 Eclipse集成Maven的方式之一是通过安装Maven插件,例如"m2e (Maven Integration for Eclipse)"。...

    eclipse maven debug

    7. **远程调试Maven**:如果需要调试远程Maven构建,可以在Maven的`mvn debug`命令中添加参数`-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y`,这将启动一个等待连接的调试器。在Eclipse...

    eclipse-maven-plugin

    "Eclipse Maven Plugin" 是一个专门为Eclipse集成开发环境设计的插件,它使得在Eclipse中管理和构建Maven项目变得更为便捷。Maven是一个广泛使用的项目管理和综合工具,它通过配置文件(pom.xml)来管理项目的依赖、...

    eclipse+maven+tomcat集成

    在Eclipse中使用Maven进行项目开发,首先需要创建一个Maven项目。Maven项目通常遵循一定的目录结构,便于统一管理和自动化构建。 - **新建Maven项目**: - 打开Eclipse,选择`File -&gt; New -&gt; Other -&gt; Maven -&gt; ...

Global site tag (gtag.js) - Google Analytics