• java 打包与运行


    问题1:java -jar xxx.jar,运行jar包没有主属性清单

    解决:打开压缩包打开文件夹META-INF,找到MANIFEST.MF文件,增加:

       Main-Class: hadoop.HdfsTest(注意:冒号后面要有个空格,不然会提示invalid or corrupt jarfile,没有META-INF也会出现这个错误,而提示没有主属性清单一般是有META-INF文件夹但下面没有MANIFEST.MF文件 )

       其中hadoop.HdfsTest为包名.类名

    问题2:intelllij idea打包不含有META-INF

    解决:选择“Main Class”后,选择“copy to the output  and link via manifest”,打包时Directory for META-INF/MAINFEST.MF,此项默认为D:workshopDbUtilsrcmainjava,需要改成:D:workshopDbUtilsrcmain esources,如果不这样修改,打成的jar包里没有包含META-INF/MAINFEST.MF文件。

    若要将所有包放在一个目录里,则可新建个目录lib,将包拖动进去,然后注意改下面的classPath,前面加上目录:lib

    问题3:怎样运行有依赖的jar程序?

    解决1:没有依赖时,java -jar xxx.jar, 要求jar 包含所依赖的所有东西,并且含有META-INF及其MANIFEST.MF, 否则会提示没有主属性清单

    解决2:运行 eg:java -cp hbase_handles.jar; myhadoop.HdfsTest

         其中-cp:classpath

          hbase_handles.jar 指类路径下的jar文件,就是-cp指定的文件,不同的jar文件在windows中用";"隔开,在linux中用":"隔开

          myhadoop.HdfsTest 这是一个类名,指主入口的类,myhadoop是一个包名,HdfsTest是这个包下的类名。

    理解:如果hbase_handles.jar中包含所有依赖的jar,或者在MANIFEST.MF中已经指定了主属性入口即Main-Class及所有依赖的jar,即classpath,那么

       java -jar hbase_handles.jar与

       java -cp hbase_handles.jar; myhadoop.HdfsTest效果是一样的    

     本例:

    Manifest-Version: 1.0
    Class-Path: libxz-1.0.jar libasm-3.1.jar libguice-3.0.jar libavro-
     1.7.4.jar libjoni-2.1.2.jar libjunit-4.12.jar libjsch-0.1.42.jar l
     ibxmlenc-0.52.jar libguava-12.0.1.jar libjets3t-0.9.0.jar libjett
     y-6.1.26.jar libjsr305-1.3.9.jar libparanamer-2.3.jar libactivatio
     n-1.1.jar libcommons-el-1.0.jar libcommons-io-2.4.jar libhbase-it-
     1.1.3.jar libhttpcore-4.1.3.jar libjavax.inject-1.jar libjaxb-api-
     2.2.2.jar libjcodings-1.0.8.jar libjettison-1.3.3.jar libjsp-2.1-6
     .1.14.jar libaopalliance-1.0.jar libcommons-cli-1.2.jar libcommons
     -net-3.1.jar libdisruptor-3.3.0.jar libjersey-core-1.9.jar libjers
     ey-json-1.9.jar liblibthrift-0.9.0.jar libservlet-api-2.5.jar libs
     lf4j-api-1.7.7.jar libzookeeper-3.4.6.jar libcommons-lang-2.6.jar l
     ibcommons-math-2.2.jar libhbase-rest-1.1.3.jar libhttpclient-4.2.5
     .jar libjersey-guice-1.9.jar libcommons-codec-1.9.jar libguice-ser
     vlet-3.0.jar libhadoop-auth-2.5.1.jar libhadoop-hdfs-2.5.1.jar lib
     hbase-shell-1.1.3.jar libjackson-xc-1.9.13.jar libjackson-xc-1.9.13
     .jar libjaxb-impl-2.2.3-1.jar libjersey-client-1.9.jar libjersey-s
     erver-1.9.jar libjetty-util-6.1.26.jar lib
    etty-3.2.4.Final.jar lib
     api-util-1.0.0-M20.jar libhbase-client-1.1.3.jar libhbase-common-1
     .1.3.jar libhbase-server-1.1.3.jar libhbase-thrift-1.1.3.jar libjs
     p-api-2.1-6.1.14.jar libleveldbjni-all-1.8.jar libmetrics-core-2.2.
     0.jar libcommons-logging-1.2.jar libcommons-math3-3.1.1.jar libhad
     oop-client-2.5.1.jar libhadoop-common-2.5.1.jar libjamon-runtime-2.
     3.1.jar libjava-xmlbuilder-0.4.jar libprotobuf-java-2.5.0.jar libs
     nappy-java-1.0.4.1.jar libspymemcached-2.11.6.jar libcommons-digest
     er-1.8.jar libhbase-examples-1.1.3.jar libhbase-it-1.1.3-tests.jar 
     libhbase-protocol-1.1.3.jar libjackson-jaxrs-1.9.13.jar libjruby-c
     omplete-1.6.8.jar libcommons-daemon-1.0.13.jar libhadoop-yarn-api-2
     .5.1.jar libhbase-procedure-1.1.3.jar libjasper-runtime-5.5.23.jar 
     libapi-asn1-api-1.0.0-M20.jar libcommons-compress-1.4.1.jar libcom
     mons-httpclient-3.1.jar libjasper-compiler-5.5.23.jar libjetty-ssle
     ngine-6.1.26.jar lib
    etty-all-4.0.23.Final.jar libservlet-api-2.5-6
     .1.14.jar libapacheds-i18n-2.0.0-M15.jar libcommons-beanutils-1.7.0
     .jar libhbase-annotations-1.1.3.jar libhbase-prefix-tree-1.1.3.jar 
     libjackson-core-asl-1.9.13.jar libhadoop-annotations-2.5.1.jar lib
     hadoop-yarn-client-2.5.1.jar libhadoop-yarn-common-2.5.1.jar libhba
     se-common-1.1.3-tests.jar libhbase-server-1.1.3-tests.jar libcommon
     s-collections-3.2.2.jar libcommons-configuration-1.6.jar libhbase-h
     adoop-compat-1.1.3.jar libjackson-mapper-asl-1.9.13.jar libhbase-ha
     doop2-compat-1.1.3.jar libhbase-resource-bundle-1.1.3.jar libcommon
     s-beanutils-core-1.8.0.jar libfindbugs-annotations-1.3.9-1.jar libh
     trace-core-3.1.0-incubating.jar libhbase-annotations-1.1.3-tests.jar
      libhadoop-yarn-server-common-2.5.1.jar libapacheds-kerberos-codec-
     2.0.0-M15.jar libhadoop-mapreduce-client-app-2.5.1.jar libhadoop-ma
     preduce-client-core-2.5.1.jar libhadoop-mapreduce-client-common-2.5.
     1.jar libhadoop-mapreduce-client-shuffle-2.5.1.jar libhadoop-mapred
     uce-client-jobclient-2.5.1.jar libspark-1.6.1-yarn-shuffle.jar libm
     ysql-connector-java-5.1.39-bin.jar libspark-assembly-1.6.1-hadoop2.7
     .1.jar
    Main-Class: myhadoop.HdfsTest

    可以看到hbase_handles.jar中如此多的依赖,当然我们可以删除其中的依赖,然后在运行的时候手动的增加依赖。如下:

    Manifest-Version: 1.0
    Class-Path: 
    Main-Class: myhadoop.HdfsTest

    可以看到,当我们去除MANIFEST.MF中的依赖时,运行出现了错误,NoClassDefFoundError,说明依赖包的类没有找到。

    当下面加上我们所依赖路径下的全部包时

    java -cp D:***workspacehbase_handlesoutartifactshbase_handles_jarlib*;hbase_handles.jar; myhadoop.HdfsTest

    运行正常。

    jar包依赖的添加我们可以用fatjar的形式也可以用这种一个个添加的形式,至于intellij idea中打包类似fatjar的还不是太了解。

  • 相关阅读:
    变形方块
    Vim编辑器设置字体高亮显示
    从命令行终端获取数值作为函数参数
    Vi编辑器的使用技巧
    iOS开发常用shell命令
    include使用技巧
    交换2个整型变量的值
    C语言位运算实现函数体
    React Native 之文件内数据操作(var、let、const、static、Props、State、this)
    React Native 城市选择(四)获取城市名称
  • 原文地址:https://www.cnblogs.com/lwhp/p/5794485.html
Copyright © 2020-2023  润新知