java程序jar打包3种方式

5 篇文章 0 订阅

想将写出来的java程序打包成.jar方式
以操作HDFS的程序来做示例, 一般情况下,使用idea方式打包出来的jar文件里只有程序本身 .class文件,没有依赖包,
所以单独的jar包不能独立运行.


第一种方式 

可以使用命令

 hadoop jar demo-1.0-SNAPSHOT.jar com.hdfs.demo

的方式运行, hadoop命令运行时,所有的依赖包都被加载.
这种方式有弊端,
    1.当有配置文件在jar包中时, 配置文件会读取失败.
读取方式 InputStream corexml = ClassLoader.getSystemResourceAsStream("etc/core-site.xml");
    2. 依赖hadoop包

 

第二种方式 

通过jinfo命令查看第一种方式 hadoop jar 进程, 加载的jar包都是  hadoop-2.9.2/share/hadoop/common/ hadoop-2.9.2/share/hadoop/hdfs/ hadoop-2.9.2/share/hadoop/yarn/ hadoop-2.9.2/share/hadoop/mapreduce/
可以使用命令
java -cp demo-1.0-SNAPSHOT.jar:hadoop-2.9.2/share/hadoop/common/lib/*:hadoop-2.9.2/share/hadoop/hdfs/lib/*:hadoop-2.9.2/share/hadoop/hdfs/*:hadoop-2.9.2/share/hadoop/common/* com.hdfs.demo
执行成功
说白了,就是加载指定目录下的依赖包.  也可以将这些依赖包拷到本地(./libs) 执行命令
java -cp demo-1.0-SNAPSHOT.jar:libs/* com.hdfs.demo
这里需要注意 加载一个目录下的jar包时   不可以写  :libs/*.jar   这种方式错误的
 

第三种方式 

使用 jar 命令,将依赖包打成一个jar文件

命令: jar -cf demo.jar com etc libs
打出来的jar包没有指定 META-INF/MANIFEST.MF, 运行报错
java -jar demo.jar com.hdfs.demo
demo.jar中没有主清单属性
MANIFEST.MF没有指定 Class-Path: 所以会找不到依赖包

指定 META-INF/MANIFEST.MF 文件 编辑内容

Manifest-Version: 1.0        ##该文件格式非常严格
Main-Class: com.hdfs.demo    ##可以不写
Class-Path: libs/activation-1.1.jar       #每个 libs/activation-1.1.jar 前后必须有一个空格
 libs/apacheds-i18n-2.0.0-M15.jar         #所有的依赖都要有, 不能缺少, 不能使用 libs/* 代替
 libs/apacheds-kerberos-codec-2.0.0-M15.jar 
 libs/api-asn1-api-1.0.0-M20.jar 
 libs/api-util-1.0.0-M20.jar 
 libs/asm-3.2.jar 
 libs/avro-1.7.7.jar 
 libs/commons-beanutils-1.7.0.jar 
 libs/commons-beanutils-core-1.8.0.jar 
 libs/commons-cli-1.2.jar 
 libs/commons-codec-1.4.jar 
 libs/commons-collections-3.2.2.jar 
 libs/commons-compress-1.4.1.jar 
 libs/commons-configuration-1.6.jar 
 libs/commons-daemon-1.0.13.jar 
 libs/commons-digester-1.8.jar 
 libs/commons-io-2.4.jar 
 libs/commons-lang-2.6.jar 
 libs/commons-lang3-3.4.jar 
 libs/commons-logging-1.1.3.jar 
 libs/commons-math3-3.1.1.jar 
 libs/commons-net-3.1.jar 
 libs/curator-client-2.7.1.jar 
 libs/curator-framework-2.7.1.jar 
 libs/curator-recipes-2.7.1.jar 
 libs/gson-2.2.4.jar 
 libs/guava-11.0.2.jar 
 libs/hadoop-annotations-2.9.2.jar 
 libs/hadoop-auth-2.9.2.jar 
 libs/hadoop-common-2.9.2.jar 
 libs/hadoop-hdfs-2.9.2.jar 
 libs/hadoop-hdfs-client-2.9.2.jar 
 libs/hadoop-hdfs-native-client-2.9.2.jar 
 libs/hadoop-hdfs-nfs-2.9.2.jar 
 libs/hadoop-hdfs-rbf-2.9.2.jar 
 libs/hadoop-nfs-2.9.2.jar 
 libs/hamcrest-core-1.3.jar 
 libs/htrace-core4-4.1.0-incubating.jar 
 libs/httpclient-4.5.2.jar 
 libs/httpcore-4.4.4.jar 
 libs/jackson-annotations-2.7.8.jar 
 libs/jackson-core-2.7.8.jar 
 libs/jackson-core-asl-1.9.13.jar 
 libs/jackson-databind-2.7.8.jar 
 libs/jackson-jaxrs-1.9.13.jar 
 libs/jackson-mapper-asl-1.9.13.jar 
 libs/jackson-xc-1.9.13.jar 
 libs/java-xmlbuilder-0.4.jar 
 libs/jaxb-api-2.2.2.jar 
 libs/jaxb-impl-2.2.3-1.jar 
 libs/jcip-annotations-1.0-1.jar 
 libs/jersey-core-1.9.jar 
 libs/jersey-json-1.9.jar 
 libs/jersey-server-1.9.jar 
 libs/jets3t-0.9.0.jar 
 libs/jettison-1.1.jar 
 libs/jetty-6.1.26.jar 
 libs/jetty-sslengine-6.1.26.jar 
 libs/jetty-util-6.1.26.jar 
 libs/jsch-0.1.54.jar 
 libs/json-smart-1.3.1.jar 
 libs/jsp-api-2.1.jar 
 libs/jsr305-3.0.0.jar 
 libs/junit-4.11.jar 
 libs/leveldbjni-all-1.8.jar 
 libs/log4j-1.2.17.jar 
 libs/mockito-all-1.8.5.jar 
 libs/netty-3.6.2.Final.jar 
 libs/netty-all-4.0.23.Final.jar 
 libs/nimbus-jose-jwt-4.41.1.jar 
 libs/okhttp-2.7.5.jar 
 libs/okio-1.6.0.jar 
 libs/paranamer-2.3.jar 
 libs/protobuf-java-2.5.0.jar 
 libs/servlet-api-2.5.jar 
 libs/slf4j-api-1.7.25.jar 
 libs/slf4j-log4j12-1.7.25.jar 
 libs/snappy-java-1.0.5.jar 
 libs/stax2-api-3.1.4.jar 
 libs/stax-api-1.0-2.jar 
 libs/woodstox-core-5.0.3.jar 
 libs/xercesImpl-2.9.1.jar 
 libs/xml-apis-1.3.04.jar 
 libs/xmlenc-0.52.jar 
 libs/xz-1.0.jar 
 libs/zookeeper-3.4.6.jar 
                          #最后必须有一个空行

然后执行命令
jar -cvmf MANIFEST.MF demo.jar com etc libs

打出来的jar文件可以直接运行  java -jar demo.jar
由于指定了Main-Class: com.hdfs.demo  可以直接使用 java -jar
Main-Class: 可以不指定

更通用的方式是   java -cp demo.jar com.hdfs.demo 或者  java -cp demo.jar com.hdfs.demo5  最后指定执行的不同类名

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值