全命令行手写MapReduce并且打包运行

主要要讲的有3个

java中的package是干啥的?

工作了好几年的都一定真正理解java里面的package关键字,这里在写MapReduce需要进行打包的时候突然发现命令行下打包运行居然不会了,这。。。。尴尬极了,都不敢说自己是java开发的。

首先来看一个很简单的例子

Hello.java

public class Hello {
    public static void main(String[] args) {
        System.out.println("hello.......
");
    }
}

那么这个在命令行下如何编译运行捏?

javac Hello.java

然后

java Hello

注意:这里要运行的话要有主方法,而且主方法一定要规范,不然就会报错。

现在我们给它加一个包,现在的文件名是HelloP.java,P代表了带package的。

HelloP.java

package com.tuhooo;

public class HelloP {
    public static void main(String[] args) {
        System.out.println("hello.......
");
    }
}

然后我们依然用上述的方法来运行这个文件:

javac HelloP.java

java HelloP

image

报错了说找不到主类。

此时正确的方式是

javac –d . HelloP.java

-d是带目录编译,将java采用的目录作为命名空间分隔符的目录连同java文件一起编译了。

然后我们运行的时候就是

java com.tuhooo.HelloP

那么怎么作为jar包运行呢?

刚刚我们已经带目录进行编译了,接下来就是打包,打包很简单但是要注意一点。

jar –cvf test.jar com/tuhooo/HelloP.class

这里的意思是将HelloP这个类打包到当前路径的test.jar中,注意如果是带包的话前面的路径名也一定要带着。

不然只有一个裸类是没用的。

[root@hadoop ~]# jar -cvf test.jar com/tuhooo/HelloP.class
added manifest
adding: com/tuhooo/Hello.class(in = 428) (out= 291)(deflated 32%)
[root@hadoop ~]# java -cp test.jar com.tuhooo.HelloP
hello.......

那么我们执行的时候就是通过如下命令来执行的

java中的package如何打包,以及运行其中的main方法?

如何手写MapReduce并在命令行打包运行?

原文地址:https://www.cnblogs.com/tuhooo/p/7805400.html