Antx的eclipse操作深究

本文详细探讨了在Eclipse环境下使用Antx时遇到的问题,包括WARN信息的分析,以及解决dependencies和jar包包含的问题。通过对现象的观察和问题的深入剖析,提供了有效的解决方案和备选方案。
  1. 前言
  2. core瘦身后,pcserver上开发的项目变化较大,许多tx都有点不适应新的开发环境,特别是如果对于antx操作命令理解不是很透彻,就会出现许多环境上的问题,影响了开发效率,本文就是在实际开发过程中遇到了类似问题及其解决过程,如果大家觉得过程没意思,可以看完现象部分后直接跳到结论部分,不必为繁杂的过程而浪费时间。

     

  3. 发现问题
  4.  

    昨天晚上为了把新分支中拉出来的项目导入eclipse,顺手就敲了个命令antx reactor goals=clean,eclipse,在eclipse中导入项目后发现一堆的红叉叉,这个问题以前也发现过,也都没有过多的去研究,直接找到项目所缺的依赖工程,加到项目的build path中就OK了,但是心念一动,为什么不深究一下为什么会这样呢?

     

  5. 观察现象
  6.  

    首先找到总控项目的project.xml文件,观察项目依赖,发现apps项目依赖的其它项目都是存在的

            <dependencies>

                <include uri="alisoft/aep/core/common/api"/>

                <include uri="alisoft/aep/core/common/web"/>

                <include uri="alisoft/apps/biz/settlement"/>

                <include uri="alisoft/apps/ext/biz"/>

                <include uri="alisoft/apps/ext/api"/>

                <include uri="alisoft/apps/biz/coupon"/>

       …...

             </dependencies>

    然后看生成的.classpath文件,生成的classpathentry中没有src部分,例如:

      <classpathentry kind="src" path="/alisoft-apps-common-biz">

      </classpathentry>

    所以Eclipse无法自动生成项目间的依赖

     

  7. 分析问题一
  8.  

    查了一下antx文档,标准的用法是:antx reactor goals=clean,default,eclipse,那么我的用法有什么问题呢?在pcserver上查看build.sh,发现其中有一步:antx reactor goals=clean,default -u /home/admin/aep/apps/antx.properties,也就是说在pcserver上拉代码的时候已经把cleandefault这两个goal已经做了,那么是不是我多用了一个clean导致的问题呢?

     

    首先重新执行了一遍build.sh,然后在windows下面执行antx reactor goals=eclipse,在Eclipse中刷新、重新编译,还是一堆红叉叉,看来不是clean的问题。

     

    仔细再看antx文档,clean用于清除生成的classes目录下的文件;default用于将项目打成jar文件;eclipse用于生成Eclipse所需的.project.classpath文件;那么为什么我在pcserver上执行了cleandefault,在windows下执行eclipse就不行呢?

     

  9. 分析问题二
  10.  

    检查windows下执行标准的antx reactor goals=clean,default,eclipse,狂慢,打开home目录下的antx.properties文件:

    antx.repository  = local, project, external

    antx.repository.project  = Z:/repository.project

    antx.repository.external = Z:/repository

     

    原来第二方和第三方库用的是pcserver共享目录中的repository,所有的jar文件读取都在Samba共享上,当然很慢啦,改成本地的第二方和第三方库,并把本地的repositorysvn up一把,执行速度快了很多。刷新Eclipse,红叉叉消失了。可是问题又来了,在build.sh中明显已经做过cleandefault了,在windows下再做一遍多么低效啊。

     

  11. 分析问题三
  12.  

    在入职的antx培训文档中得知eclipse命令是以antx插件的形式存在的,在antx的源文件目录找到了eclipse插件源文件:antx/plugin/antx-eclipse/plugin.jelly,仔细读了一下,最后几句是用来生成src类型的classpathentry的:

      <j:useBean var="internalProjects" class="java.util.HashSet"/>

      <j:forEach var="dep" items="${items}">

          <j:if test="${!internalProjects.contains(pom.getProjectTargetId(dep.library.URI))}">

              <classpathentry kind="src" path="/${pom.getProjectTargetId(dep.library.URI)}"/>

              <j:set var="dummy" value="${internalProjects.add(pom.getProjectTargetId(dep.library.URI))}"/>

          </j:if>

      </j:forEach>

    也就是说是否生成这部分classpathentry,是由internalProjects这个HashSet中是否包含project.xml中包含的项目来决定的,为了更进一步研究这部分功能,只能求助于antx源代码了

     

    打开antx的源文件,这里提下antx的源代码形式,真的非常赞,代码目录不光包括了所有的第三方库,还包含一个build文件,里面提供清除环境的target:clean-all ;生成eclipse项目文件的target:eclipse-all ;发布antx项目的target:dist;我们平时默认只用到了它的dist,生成antx的执行文件,其要想了解antx的源代码也是很方便的。导入antx源码后问题又来了,由于没有antx的底层设计文档,无法得知代码从哪里开始运行,因此看源码也无从下手,在打了几个log并重新编译antx若干次后,无意发现在antx的执行目录竟然存在一个antx-debug.bat,运行后发现其竟然打开了8000端口,用Eclipse连上去后,在若干靠谱的地方打上点,成了!依靠不断的反向运行,终于找到了antx运行的入口点。

     

    分析代码的过程不再复述,在jar这个goal中,除了生成jar文件以外,还将这些生成的jar安装到local repository中,代码如下:

    <repository:install uri="${jar.library.name}" profile="${profile}">

        <repository:item path="${jar_destfile.file}" sourcePath="${java.srcdir}"/>

     

        <j:if test="${jar_mergeDependencies == null or jar_mergeDependencies == ''}">

            <j:forEach var="dep" items="${deps}">

                <repository:required uri="${dep}"/>

            </j:forEach>

        </j:if>

    </repository:install>

     

  13. 结论
  14.  

    antxdefault命令(在apps项目中就是jar命令)不光生成了jar文件,还会将jar文件注册到第一方库中,所以在pcserver上执行的default命令只是将这些项目的jar文件注册在Linux环境中的第一方库中,到windows中执行eclipse命令由于找不到这些第一方库文件,所以无法生成项目依赖,我们要做的其实非常简单:

    1. 将windowshome目录中的antx.properties文件改为:

    antx.repository  = local, project, external

    antx.repository.local = Z:/.antx/repository

    antx.repository.project  = Z:/repository.project

    antx.repository.external = Z:/repository

    将第一方库指向pcserver上的第一方库位置

    2. 按照普通流程拉代码:sh build.sh

    3. 在windows下执行antx reactor goals=eclipse,刷新Eclipse,搞定!

     

  15. 其它方案
  16. 组里其他同学也提出了一个方案:在build.sh中的antx命令加入eclipse,即:antx reactor goals=clean,default,eclipse,然后运行一个本地的脚本,替换生成的.classpath文件中的jar文件路径,将/home/admin/repository...替换为windows下的Z:/repository

     

    这种做法其实也可以解决问题,好处是速度快,都是在Linux下执行,不用在windows下维护一套antx的环境,如antx.propertis文件;问题是如果我们的项目增加了,或者修改了路径等,这个本地脚本就要随之改变。大家可以根据自己的实际情况选择使用。

     

  17. 关于antx运行过程中的WARN问题
  18. 有同学提出在antx运行过程中有无数的WARN,屏幕被刷的厉害,其实只要找到$ANTX_HOME$/../../main/src/java/com/alibaba/antx/repository/query/LibraryItemQuery.java文件,找到235行的System.out并删除这句话,然后运行$ANTX_HOME$/../../build.bat(sh)就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值