分享

简化 Hadoop 2.4.1 Eclpse 插件编译

问题导读:
Eclipse插件其实可有可无的,甚至如果你是高手,只要一个文本框即可编程。
对于Eclipse插件本站已经不少了
Hadoop2.4.0 Eclipse插件制作及问题记录

Hadoop2.4.0 Eclipse插件制作

Hadoop 2.2.0编译hadoop-eclipse-plugin插件
hadoop-eclipse-plugin-2.2.0.jar插件包分享


有了上面基础,我们在进行Hadoop 2.4.1 插件制作,就容易多了




昨天折腾hadoop2X的eclipse插件,从https://github.com/winghc/hadoop2x-eclipse-plugin把源码搞下来后,很快搞定出来一个,但是。。。New Hadoop Location时,窗口出不来,汗死,原因后面会说明的。源码难下,最后我会附上源码包的。

  仔细看了ant和ivy的文件之后,我发现了一个坑爹的现象,编译一个插件,需要ivy么?!
  ant用了好久了,还是自己写一个的好。
  查看了jar包,都是hadoop安装目录里面存在的,还需要连网去检测啊!看了下ivy的调试信息,也就那么些东西,直接删除ivy!
  重新写了个build.xml,只要往目录hadoop2x-eclipse-plugin-master/src/contrib/eclipse-plugin里面一丢,改改前5个属性的值,直接跑“ant jar”就行了。
  或者eclipse建立一个普通项目,把


  1. META-INF
  2. resources
  3. src
  4. build.properties
  5. plugin.xml
复制代码

往项目一丢,再把build.xml丢进去,改了前5个属性值直接跑就行了。
  build.xml内容如下


  1. <?xml version="1.0"?>
  2. <project name="eclipse-plugin" default="jar">
  3.     <property name="jdk.home" value="G:/jdk/jdk1.6.0" />
  4.     <property name="hadoop.version" value="2.4.1" />
  5.     <property name="hadoop.home" value="G:/hadoop/hadoop-2.4.1" />
  6.     <property name="eclipse.version" value="4.4" />
  7.     <property name="eclipse.home" value="G:/eclipse4.4" />
  8.     <property name="root" value="${basedir}" />
  9.     <property file="${root}/build.properties" />
  10.     <property name="name" value="${ant.project.name}" />
  11.     <property name="src.dir" location="${root}/src/java" />
  12.     <property name="build.contrib.dir" location="${root}/build/contrib" />
  13.     <property name="build.dir" location="${build.contrib.dir}/${name}" />
  14.     <property name="build.classes" location="${build.dir}/classes" />
  15.     <!-- all jars together -->
  16.     <property name="javac.deprecation" value="off" />
  17.     <property name="javac.debug" value="on" />
  18.     <property name="build.encoding" value="ISO-8859-1" />
  19.     <path id="eclipse-sdk-jars">
  20.         <fileset dir="${eclipse.home}/plugins/">
  21.             <include name="org.eclipse.ui*.jar" />
  22.             <include name="org.eclipse.jdt*.jar" />
  23.             <include name="org.eclipse.core*.jar" />
  24.             <include name="org.eclipse.equinox*.jar" />
  25.             <include name="org.eclipse.debug*.jar" />
  26.             <include name="org.eclipse.osgi*.jar" />
  27.             <include name="org.eclipse.swt*.jar" />
  28.             <include name="org.eclipse.jface*.jar" />
  29.             <include name="org.eclipse.team.cvs.ssh2*.jar" />
  30.             <include name="com.jcraft.jsch*.jar" />
  31.         </fileset>
  32.     </path>
  33.     <path id="project-jars">
  34.         <fileset file="${build.dir}/lib/*.jar" />
  35.     </path>
  36.     <target name="init" unless="skip.contrib">
  37.         <echo message="contrib: ${name}" />
  38.         <mkdir dir="${build.dir}" />
  39.         <mkdir dir="${build.classes}" />
  40.         <mkdir dir="${build.dir}/lib" />
  41.         <copy todir="${build.dir}/lib/" verbose="true">
  42.             <fileset dir="${hadoop.home}/share/hadoop/mapreduce">
  43.                 <include name="hadoop*.jar" />
  44.                 <exclude name="*test*"/>
  45.                 <exclude name="*example*"/>
  46.             </fileset>
  47.             <fileset dir="${hadoop.home}/share/hadoop/common">
  48.                 <include name="hadoop*.jar" />
  49.                 <exclude name="*test*"/>
  50.                 <exclude name="*example*"/>
  51.             </fileset>
  52.             <fileset dir="${hadoop.home}/share/hadoop/hdfs">
  53.                 <include name="hadoop*.jar" />
  54.             </fileset>
  55.             <fileset dir="${hadoop.home}/share/hadoop/yarn">
  56.                 <include name="hadoop*.jar" />
  57.                 <exclude name="*test*"/>
  58.                 <exclude name="*example*"/>
  59.             </fileset>
  60.             <fileset dir="${hadoop.home}/share/hadoop/common/lib">
  61.                 <include name="protobuf-java-*.jar" />
  62.                 <include name="log4j-*.jar" />
  63.                 <include name="commons-cli-*.jar" />
  64.                 <include name="commons-collections-*.jar" />
  65.                 <include name="commons-configuration-*.jar" />
  66.                 <include name="commons-lang-*.jar" />
  67.                 <include name="jackson-core-asl-*.jar" />
  68.                 <include name="jackson-mapper-asl-*.jar" />
  69.                 <include name="slf4j-log4j12-*.jar" />
  70.                 <include name="slf4j-api-*.jar" />
  71.                 <include name="guava-*.jar" />
  72.                 <include name="hadoop-annotations-*.jar" />
  73.                 <include name="hadoop-auth-*.jar" />
  74.                 <include name="commons-cli-*.jar" />
  75.                 <include name="netty-*.jar" />
  76.             </fileset>
  77.         </copy>
  78.     </target>
  79.     <target name="compile" depends="init" unless="skip.contrib">
  80.         <echo message="contrib: ${name}" />
  81.         <javac fork="true"  executable="${jdk.home}/bin/javac" encoding="${build.encoding}" srcdir="${src.dir}" includes="**/*.java" destdir="${build.classes}" debug="${javac.debug}" deprecation="${javac.deprecation}" includeantruntime="on">
  82.             <classpath refid="eclipse-sdk-jars" />
  83.             <classpath refid="project-jars" />
  84.         </javac>
  85.     </target>
  86.     <target name="jar" depends="compile" unless="skip.contrib">
  87.         <pathconvert property="mf.classpath" pathsep=",lib/">
  88.             <path refid="project-jars" />
  89.             <flattenmapper />
  90.         </pathconvert>
  91.         <jar jarfile="${build.dir}/hadoop-${hadoop.version}-eclipse-${eclipse.version}-plugin.jar" manifest="${root}/META-INF/MANIFEST.MF">
  92.             <manifest>
  93.                 <attribute name="Bundle-ClassPath" value="classes/,lib/${mf.classpath}" />
  94.             </manifest>
  95.             <fileset dir="${build.dir}" includes="classes/ lib/" />
  96.             <fileset dir="${root}" includes="resources/ plugin.xml" />
  97.         </jar>
  98.     </target>
  99.     <target name="clean">
  100.         <echo message="contrib: ${name}" />
  101.         <delete dir="${build.dir}" />
  102.     </target>
  103. </project>
复制代码


最前面5个属性中,jdk.home指定编译时用的jdk,hadoop和eclipse版本号是用来给jar起名字的,hadoop.home是hadoop安装目录,会从里面提取需要的文件,eclipse.home是eclipse的安装目录,MyEclipse中是那个Common目录。
  原版中坑爹的jar包版本号无视了,MANIFEST.MF的classpath值也懒得去改了,都自动了,虽然自动会多了几个值,但是总比少的好。
  又回到最开始的问题,new hadoop location时的窗口问题,是因为少了commons-collections包,所以直接从hadoop安装目录把这个包拉进来打包了,然后问题解决!
  用jdk1.6编译了两个插件包,MyEclipse10的和Eclipse4.4的,都能用。至于上传文件时由于当前用户名导致的权限问题,这个就是改配置或改代码的事情了,我是编译前直接在源码里面加了两行,反正插件随便编译一下就有了。

011545068993707.jpg


最后附上官方源码,里面原先那个打包好的插件干掉了,都是旧的,还巨大无比!下载源码包 master.zip (352.87 KB, 下载次数: 18)

已有(1)人评论

跳转到指定楼层
wordwan@163.com 发表于 2014-8-5 09:51:18
可以直接使用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条