[转帖]用 Maven 处理复杂构建_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3457 | 回复: 0   主题: [转帖]用 Maven 处理复杂构建        下一篇 
lijia.peng
注册用户
等级:上尉
经验:753
发帖:66
精华:0
注册:2013-11-5
状态:离线
发送短消息息给lijia.peng 加好友    发送短消息息给lijia.peng 发消息
发表于: IP:您无权察看 2013-11-11 9:49:27 | [全部帖] [楼主帖] 楼主

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-commons 是 metrics-core 和 metrics-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-core 和 metrics-model 都继承了 metrics-commons,如下所示:

  1. 创建 metrics-model 和 metrics-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。

现在可以开始编码核心类(可能还会发现从 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 存储库的位置

现在可以开始编码了。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论