`
hyw520110
  • 浏览: 221129 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

当 Maven 遇上 Eclipse

阅读更多

简介:  Maven 是一个功能强大的工具,但需要将其集成到流行的集成开发环境 (IDE) 中,以使其功能更易用且让您的工作更轻松,从而增加您的生产力和项目质量。Mevenide 将 Maven 平滑集成到 Eclipse 中,帮助降低了第一次面对 Maven 时的学习曲线。本教程提供了如何让 Maven 与 Eclipse 协作的具体例子。

用 Maven 处理复杂构建

Maven 概述

最近有一股 Maven 热,您可能也没有幸免。在 2001 年 Maven 进入市场之前,还没有真正的构建工具。开发人员和构建管理人员必须不厌其烦地编写构建脚本,并以没完没了的维护噩梦收场。

Maven 是围绕项目对象模型 (POM) 概念的软件项目管理工具,POM 封装了项目的结构和概念元数据,比如标识信息,依赖关系和布局描述。重要项目元数据的声明表示缩短了需要投入项目中的时间量,并增强了它的全局理解力。

Maven 还促进了重用性和简约性,通过鼓励减少内容关联并将项目分割成更小的实体,使得项目更易维护。但当应用程序分割成小颗粒的子项目时,您需要一种方法来立即构建整个应用程序。基于此目的,Maven 提供了一种自动分解处理顺序、将多个项目构建成全局项目的方法(参阅 参考资料)。


构造项目

在本教程中,将为 Eclipse 创建 JavaNCSS 插件(参阅 参考资料)。JavaNCSS 允许从 Java 源代码收集简单的 metric。不幸的是,它在开发时并未考虑到重用性和集成。所以,必须先在其上创建一薄层以便将其简单嵌入。尽管 JavaNCSS 主要是一个命令行工具,但它具有将收集到的数据保存到 XML 文件中的能力。毫无疑问,您将使用该特性。

您已经能猜到需要做什么了。您需要一个命令行包装器和一个解析器。

为了实现简约性和重用性的目的,您将分离这两方面,将它们开发为独立的项目,每个项目生成自己的工件,并具有自己的生命周期。然而,它们是同一项目的一部分,因此共享一些属性,比如公共目录布局。为了避免信息重复,将在抽象父项目中分解共享属性。最终将得到三个项目:

  • metrics-model 提供解析器。该解析器和映射到 XML 的底层类是使用 maven-modello-plugin (参阅 参考资料)从 XML 描述(可以在本教程的 os-maveneclsrc.zip 文件中找到)中生成的。
  • metrics-core 封装命令行包装器,并依赖 metrics-model
  • metrics-commonsmetrics-coremetrics-model 继承的父项目。

下列代码段显示了 metrics-commons 的项目模型:

 

<project>
    <pomVersion>3</pomVersion>
    <groupId>dw-metrics</groupId>
    <artifactId>metrics-commons</artifactId>
    <currentVersion>1.0-SNAPSHOT</currentVersion>
    <name>Metrics Parent</name>
    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>
        <!-- declare resource directories as well -->
    </build>
</project>

简单的解析器生成

metrics-coremetrics-model 都继承了 metrics-commons,如下所示:

  1. 创建 metrics-modelmetrics-core POM
  2. 记住将 metrics-model 添加到 metrics-core 依赖关系中,将 maven-modello-plugin 添加到 metrics-core 的依赖关系列表中,如下所示:
    <project>
        <extend>../metrics-commons/project.xml</extend>
        <pomVersion>3</pomVersion>
        <artifactId>metrics-model</artifactId>
        <name>Metrics Model</name>
        <dependencies>
            <dependency>
                <groupId>maven</groupId>
                <artifactId>maven-modello-plugin</artifactId>
                <version>1.0-alpha-1-SNAPSHOT</version>
                <type>plugin</type>
            </dependency>
        </dependencies>
        <build>
            <sourceDirectory>target/generated-sources/modello</sourceDirectory>
        </build>
    </project>
    

因为要生成该项目包含的惟一源文件,所以必须覆盖 metrics-model POM 中的 sourceDirectory 元素以使 maven-java-plugin 正确工作。源生成应发生在编译开始之前:

  1. metrics-model 中创建 maven.xml 文件
  2. preGoal 添加到 java:compile 目标中:
    <project xmlns:maven="jelly:maven">
        <preGoal name="java:compile">
            <!-- generate classes with modello first -->
            <attainGoal name="modello:java" />
            <attainGoal name="modello:xpp3-reader" />
            <path id="generated.src" 
                     location="${maven.modello.targetDirectory}"/>
            <!-- add generated.src to default src path -->
            <maven:addPath id="maven.compile.src.set" refid="generated.src"/>
        </preGoal>
    </project>
    


润饰构建

还需要创建一个主项目,其惟一目的在于触发多项目构建。如下所示:

  1. metrics-master 中创建 maven.xml 脚本文件
  2. 声明方便的自定义目标:
    <project xmlns:j="jelly:core">
        <goal name="metrics:site" prereqs="clean,multiproject:site" />
        <goal name="metrics:build">
            <j:set var="goal" value="clean,jar:install"/>
            <attainGoal name="multiproject:goal"/>
        </goal>
    </project>
    

要构建整个项目,打开 shell 并运行下列命令:maven metrics:build

图 1 以类似 UML 的表示法描述了已经创建的项目结构。

图 1. Metrics 项目的结构和依赖关系
Metrics 项目的结构和依赖关系

现在可以开始编码核心类(可能还会发现从 os-maveneclsrc.zip 文件中获得目前所描述的项目的源代码更容易一些)。


协调 Maven 与 Eclipse

无疑您不能从记事本中获得任何生产力,而当今的项目太复杂了,以至于不得不使用 IDE。所以,问题很简单:如何协调 Maven 和 IDE?如何在 Eclipse 中编码和开发,如何用 Maven 构建?

Eclipse 具有自己的项目表示,所以需要一座桥梁以将 Maven 元数据转换为 Eclipse 可以理解的形式。幸运的是,Maven 带有一个插件 maven-eclipse-plugin ,它允许从 POM 自动生成 Eclipse 项目文件(参阅 参考资料)。


将项目导入 Eclipse 中

取决于 POM 中的信息,maven-eclipse-plugin 创建 .classpath 文件,其中带有源目录和测试源目录项、依赖关系和依赖项目项,以及输出目录项。必要的时候甚至会添加 zip 源附件。步骤如下:

  1. 要指定 metrics-core 中的 metrics-model 依赖关系被绑定到 Eclipse 项目,则将下列属性添加到 metrics-model 依赖关系中:
    <properties>
        <eclipse.dependency>true</eclipse.dependency>
    </properties>
    

  2. 要为每个子项目生成 .classpath 文件,从 metrics-master 中运行下列命令:
    maven -Dgoal=eclipse:generate-classpath multiproject:goal

在开始编码之前,将项目导入到 Eclipse 中,步骤如下:

  1. 启动 Eclipse
  2. 浏览到 file > import
  3. 选择 Existing Project into workspace 并单击 Next
  4. 在根目录文本框中,输入 metrics-master 的父文件夹
  5. 单击 Select All,然后单击 Finish

最后一步配置

此时,项目将不编译。maven-eclipse-plugin 使用特殊的类路径变量 MAVEN_REPO 生成 .classpath,它指向本地存储所有依赖关系的本地 Maven 存储库, 从而允许更好的协作开发。需要按如下步骤声明:

  1. 打开 Preferences 窗口
  2. 转到位于 Java > Build Path 节点下的 Classpath Variables 页面
  3. 单击 New
  4. 将名称设置为 MAVEN_REPO,值设置为本地 Maven 存储库的位置(参见图 2)

    图 2. 在 Classpath Variables 窗口中添加 MAVEN_REPO
    在 Classpath Variables 窗口中添加 MAVEN_REPO

现在可以开始编码了。


关于多项目

正如前面所看到的,Maven 在处理涉及许多子项目的复杂项目时有用。如果更深入地研究所推荐的 Maven 多项目布局,将注意到它是以层次方式构造的:结构的根包含共享元数据,比如父 POM、共享属性和公共目标定义。在某种程度上,该结构类似于 Eclipse 工作空间,包括包含当前工作空间配置的顶层元数据文件夹。

但是,Eclipse 工作空间元数据不能由用户手动编辑,但是您应该能够添加并手动编辑 Maven 元数据(最终添加文件夹以构造它)。不能将 Maven 项目根导入为 Eclipse 项目,因为它将与现有子项目重叠,而 Eclipse 还不支持项目重叠。


关于非 Eclipse 友好的项目

自然冲突存在于典型 Maven 项目布局(层次结构,父文件位于层次结构根)和 Eclipse 项目结构。这就是为什么让 Maven 和 Eclipse 顺利协作的惟一可行方法是平铺层次结构,以使共享元数据包含在子项目中。

但这并不总是可行。例如,假设要检出层次结构化的但对其没有控制权的项目。如何让 Eclipse 与该项目良好协作?在这种情况下,一些应急方案(每个都具有自己的缺点)可以帮助您处理该问题:

  • 使用一个大 Eclipse 项目——主要缺点是损失依赖关系可见度;几乎无法说明哪个模块依赖于哪个库。这还促进了循环,使得平均信息量增加得更快,维护更困难。
  • 在 Eclipse 外部编辑根文件——这是本文展示的最安全的应急方案。但是,该解决方案不易于使用,因为它需要在工具间切换,而且还易出错。
  • 创建只包含到根文件和文件夹的链接的虚拟项目——尽管易于使用,但该解决方案有两个缺点:不支持变量扩张(因此在团队环境中很麻烦),而且必须手动配置。

这些只是提示,并非建议。应该尽量避免使用这些方法。最终,应该尝试重构您的构建,而不要依赖这些让事情变得更困难的应急方案。

分享到:
评论

相关推荐

    maven Integration for Eclipse

    4. **更新项目配置**:当pom.xml文件更改时,m2eclipse会自动更新项目的构建路径和类路径,确保与Maven配置同步。 5. **源码与Javadoc集成**:m2eclipse可以自动下载并关联项目的源码和Javadoc,便于调试和查阅。 ...

    maven2.0+eclipse插件

    ** Maven 2.0 和 Eclipse 插件:构建与管理Java项目的新篇章 ** Maven 2.0 是一个强大的项目管理和构建工具,它在Java开发领域中扮演着至关重要的角色。Maven 提供了一种标准化的方式来管理项目的构建、依赖和文档...

    maven2 的eclipse插件

    插件安装时,我们只需在eclipse根目录下新建一个【links】目录,然后在里面创建【.link】扩展名的文件,在里面写上类似于【path=F:\\IDE\\eclipsePlugin\\maven2】这样的配置信息,不就可以统一管理我们自己的插件了...

    maven java maven Eclipse 环境构建

    - 选择合适的 Maven 插件版本进行安装,确保只选择 `maven Integration for Eclipse` - 完成下载和安装后,重启 Eclipse,检查是否成功集成 Maven 一旦完成上述步骤,你便能在 Eclipse 中使用 Maven 进行项目构建...

    maven-eclipse-plugin

    【maven-eclipse-plugin】是Maven生态中的一个重要插件,它主要负责将Maven项目导入Eclipse这样的IDE中,以便于开发人员进行便捷的开发和管理。在使用Maven时,理解并熟练掌握这个插件的使用对于提高开发效率至关...

    maven安装和eclipse集成

    【 Maven 安装和 Eclipse 集成】 Maven 是一个强大的项目管理和构建工具,它主要负责管理项目构建、依赖关系以及项目的生命周期。Maven 的核心功能是通过使用 Project Object Model (POM) 文件来自动解决项目的依赖...

    Maven在eclipse中的项目启动命令

    ### Maven在Eclipse中的项目启动命令详解 #### 一、Maven简介 Maven是一款流行的自动化构建工具,它主要用于Java项目的构建与管理。Maven通过一个中心信息文件`pom.xml`来管理项目的构建过程、依赖关系以及其他...

    Maven 2 Eclipse Plugin

    4. **更新项目配置**:当Maven的POM.xml文件发生变化时,插件会自动更新Eclipse的项目设置,保持两者同步。 5. **源码和Javadoc集成**:自动下载并关联依赖库的源码和Javadoc,便于开发者查阅和调试。 6. **插件...

    eclipse安装maven插件需要包

    首先,我们需要在Windows系统上配置Maven环境。这包括以下步骤: 1. **下载Maven**: 访问Apache官方网站(https://maven.apache.org/download.cgi)下载最新版本的Maven。选择适合你的操作系统的zip或tar.gz文件,...

    maven插件的eclipse插件

    将Maven与Eclipse结合使用的桥梁就是"Maven插件的Eclipse插件",也称为m2e(Maven Integration for Eclipse)。 m2e是Eclipse官方提供的一个插件,它的主要作用是将Maven的功能无缝集成到Eclipse中,让开发者在...

    maven+dubbo+eclipse

    在IT行业中,Maven、Dubbo和Eclipse是三个非常重要的工具,它们分别代表了项目构建、服务治理和集成开发环境。在这个“maven+dubbo+eclipse”的案例中,我们将探讨如何结合这三个技术进行分布式服务开发。 首先,...

    maven3.0.3及eclipse-maven3-plugin插件

    当 pom.xml 文件发生变化时,M2E 会自动检测并更新项目的构建配置,保持 Eclipse 工程与 Maven 项目的一致性。 3. **依赖可视化**: M2E 提供了依赖树视图,方便查看和管理项目的依赖关系。 4. **支持Maven生命...

    maven插件和eclipse集成

    maven跟eclipse插件集成. 1,打开你本地的eclipse根目录,随便新建一个文件夹例如mavenPlugin,把maven离线插件包中两个文件夹复制到这个新建的这个文件夹里边. 2,找到eclipse根目录下的dropins文件夹,进去后,新建...

    maven安装以及eclipse配置maven

    ### Maven安装及Eclipse配置详解 #### Maven简介与安装步骤 **Maven**是一款由Apache组织提供的项目管理和构建工具,它能帮助开发者更好地管理项目的构建、依赖关系等。Maven的强大之处在于它提供了统一的标准流程...

    maven 安装包 和 eclipse 插件

    这个版本的Maven包含了所有必要的文件和库,可以在各种操作系统上运行。下载的压缩包名为`apache-maven-3.1.0-bin.zip`。安装步骤如下: 1. 解压`apache-maven-3.1.0-bin.zip`到你选择的目录,例如`C:\Program ...

    maven的安装文件以及集成TOMCAT、eclipse的教程

    本教程将详细介绍如何安装Maven,以及如何在Eclipse集成Maven和Tomcat,帮助开发者更高效地进行Java Web项目的开发。 **一、Maven的安装** 1. **下载Maven**: Maven的安装包可以从官方网站Apache Maven ...

    eclipse的maven插件

    Eclipse的Maven插件是开发Java项目时不可或缺的工具,它将强大的Maven构建系统与流行的Eclipse集成开发环境(IDE)相结合,为开发者提供了一站式解决方案。Maven是一个项目管理和综合工具,它通过定义项目的结构和...

    maven2 for Eclipse dropins插件

    3. **项目同步**:当`pom.xml`文件发生更改时,插件会自动检测并同步更新,保持Eclipse工程配置与Maven配置的一致性。 4. **智能提示和代码完成**:基于Maven的项目结构,插件提供了代码提示和补全功能,提高编码...

    Eclipse Indigo 离线安装maven插件m2eclipse

    旧版本eclipse,比如indigo版本要安装maven,旧的在线安装方式已经失效,因为依赖的zest和m2eclipse的location url都已经无法访问。所以从已经安装这两个包的eclipse中分离出离线的安装包,拷贝到对应的features和...

Global site tag (gtag.js) - Google Analytics