将SeqReader打包成可执行的jar包

SeqReader是我定义的一个读取SequenceFile文件,并将部分(key,value)打印到控制台窗口的类,其完整代码如下:

 1 /**
 2  * Created with IntelliJ IDEA.
 3  * User: hadoop
 4  * Date: 16-3-14
 5  * Time: 上午9:57
 6  * To change this template use File | Settings | File Templates.
 7  */
 8 import org.apache.hadoop.conf.Configuration;
 9 import org.apache.hadoop.fs.FileSystem;
10 import org.apache.hadoop.fs.Path;
11 import org.apache.hadoop.io.SequenceFile;
12 import org.apache.hadoop.io.Writable;
13 import org.apache.hadoop.io.IntWritable;
14 import org.apache.hadoop.io.DoubleWritable;
15 import org.apache.hadoop.io.ArrayWritable;
16 import org.apache.hadoop.util.ReflectionUtils;
17
18 import java.io.IOException;
19 import java.net.URI;
20
21 public class SeqReader  {
22     public static void main(String[] args) throws IOException {
23         String uri=args[0];
24         //String uri="/home/hadoop/2016Test/SeqTest/10IntArray";
25         Configuration conf=new Configuration();
26         FileSystem fs =FileSystem.get(URI.create(uri),conf);
27         Path path=new Path(uri);
28         SequenceFile.Reader reader=null;
29         //DoubleWritable[] doubleWritableArray=new DoubleWritable[Integer.parseInt(args[1])];
30
31        /* for (int i=0;i<doubleWritableArray.length;++i){
32             doubleWritableArray[i]=new DoubleWritable(0.0);
33         }
34         */
35         try {
36             reader=new SequenceFile.Reader(fs,path,conf);
37             IntWritable key =(IntWritable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
38             DoubleArrayWritable value=(DoubleArrayWritable)ReflectionUtils.newInstance(reader.getValueClass(),conf);
39             long position=reader.getPosition();
40             String[] sValue=null;
41             int index;
42             int counter=0;
43             StringBuilder sb=new StringBuilder();
44             while(reader.next(key,value)){
45                 if(key.get()%Integer.parseInt(args[1])==0){
46                     System.out.println("key:"+key.get());
47                     index=-1;
48                     for (Writable val:value.get()){
49                     //doubleWritableArray[++index].set(((DoubleWritable)val).get());
50                         if (counter>10){
51                             break;
52                         }
53                         counter++;
54                         sb.append(((DoubleWritable)val).get()).append(",");
55                     }
56                     System.out.println("value:"+sb.toString());
57
58                 }
59
60             }
61         }
62         finally {
63             //IOUtils.closeStream(reader);
64         }
65     }
66
67 }
68 class DoubleArrayWritable extends ArrayWritable {
69     public DoubleArrayWritable(){
70         super(DoubleWritable.class);
71     }
72     /*
73     public String toString(){
74         StringBuilder sb=new StringBuilder();
75         for (Writable val:get()){
76             DoubleWritable doubleWritable=(DoubleWritable)val;
77             sb.append(doubleWritable.get());
78             sb.append(",");
79         }
80         sb.deleteCharAt(sb.length()-1);
81         return sb.toString();
82     }
83     */
84 }

关于生成可执行jar包,这里只说几点需要注意的地方,详细信息可以参考:http://www.cnblogs.com/lz3018/p/5228639.html

1)首先就是MANIFEST.MF文件的配置,应该保证配置完成之后,文件有一个空白行,使用gedit编辑此文件,打开“显示行号”功能。

前4行是我们配置的有效内容,第5行就是我们文件需要的空白行,第6行是目前准备写入字符的行,此时我们就保存文件,那我们文件内容就是包含有字符的前四行,外加一个空白行,也就是我们文件总共有5行。

2)对于Main-Class,当我们的类中没有定义包名的话,那么只需要写主类名称就可以了。(只有eclipse中采用默认包名就是类名这一说法吧)

3)当我们使用jar cfm SeqWriter.jar MANIFEST.MF *.class重新打jar包之后,使用命令java -jar SeqWriter.jar part-r-00000 1000运行jar包时,提示"NoClassDefFoundError":

也就是找不到类 /org/apache/commons/logging/LogFactorty,这个类是在commons-logging-1.1.1中,我们只需要添加这个jar包就可以了,怎么添加了,就是在MANIFEST.MF文件在添加Class-Path属性,给属性配置这个jar包的路径就可以了(多个jar包用空格分隔),完成上述操作之后,使用jar命令重新生成jar包,再使用java -jar执行jar包,然后又出现如下提示:

还是找不到类,仍然是按照上述方法将commons-configuration-1.6.jar的路径添加到Class-Path中,再重新打包、运行·,如下:

同样的,将comons.lang-2.4.jar的路径添加到Class-Path中,然后重新打包、运行,结果如下所示:

成功运行。

时间: 2024-12-17 23:32:58

将SeqReader打包成可执行的jar包的相关文章

java打包成可执行的jar或者exe的详细步骤

Java程序完成以后,对于Windows操作系统,习惯总是想双击某个exe文件就可以直接运行程序,现我将一步一步的实现该过程.最终结果是:不用安装JRE环境,不用安装数据库,直接双击一个exe文件,就可以运行程序 下面介绍过程: 第一步:完成Java GUI程序在Eclipse下,程序能够正常运行. 第二步:准备清单文件(MANIFEST.MF) 方法1:直接拷贝其它能运行的JAR文件中的MANIFEST.MF进行修改方法2:利用IDE工具,如Eclipse在生成JAR文件时自动生成MANIFE

maven项目打包成可执行的jar

编写功能类:   编写main方法类:   在pom文件中配置:   打包方式: 1.进入到项目所在目录,例如: cd D:\workspace\riskCompensate\FileToZkUtil 2.运行命令 mvn assembly:assembly 3.在项目的target目录中可以看到如下文件 说明打包完成. 运行方式: 1.在cmd命令窗口进入target目录 cd  cd D:\workspace\riskCompensate\FileToZkUtil\target 2.输入 j

用Maven打包发布可执行的jar包

项目有个需求,要把当前项目的代码和依赖打包成一个jar包,再把jar包和一些相关文件一起打包成一个tar 这里用到了两个插件,shade 和assembly,shade负责生成jar包,assembly负责打包成tar.pom.xml配置如下:     <build>         <plugins>              <plugin>                 <groupId>org.apache.maven.plugins</gr

如何将maven项目打包成可执行的jar

看见网上有好几种打包的方式,但是我目前只使用了下面这种方式. 修改pom.xml文件,添加插件 <!-- 打包 --> <plugin>     <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <a

eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序

一.新建maven的java工程 1.eclipse里file-new-other,选择maven Project 2.选中 Use default Workspace location,然后 next 3.选择maven-archetype-quitstart,然后next 4.填入工程信息,然后finish 6.新建好的工程结构如图 7.将test下和java下自动生成的java类删除,右键build-path选择好jdk版本,整个工程就建好了. 二.配置log4j 1.将工程目录调整成下图

IDEA Maven 打包独立可执行的 jar 包

在 pom.xml 中添加了如下配置后,打包出来的依然是普通的 xxxx.jar 文件,并没有后面的 jar-with-dependencies,经过网上多方寻找之后,参考这篇文章 得到解决 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</vers

Maven-生成可执行的Jar包

<plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <goals> <goal>exec</goal> &l

java项目打包成可运行的jar,main方法带参数

转载    侵联删!!! 原文地址:http://www.cnblogs.com/neillee/p/6063808.html#commentform 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行 一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的.对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打包成 war 文件,上传至服务器,供调用.而

创建可执行的JAR包并运行

将一个应用程序制作成可执行的JAR包,通过JAR包来发布应用程序.创建可执行JAR包的关键在于:让java -jar命令知道JAR包中哪个类是主类,java -jar命令可以通过运行该主类来运行程序.注意:当创建JAR包时,所有的类(即class文件)都必须放在与包结构对应的目录结构中 1.选择想要想要打包的目录 想要打包class文件目录day和程序需要调用的文件目录planeday11是Client类的包名,里面存放着Client.class 2.进入预打包目录所在路径(注意:是要打包目录的