Intellij IDEA打包文件manifest文件信息有误
Intellij IDEA 版本:ideaIC-2017.2.5
错误现象:
Intellij IDEA 中可以执行
提交到spark(standalone 本地master方式)中无法执行,报错信息如下:
SQLContextAPP是我要运行的主类(Main CLass),解压jar包发现SQLContextAPP是存在的,不知道为什么会报找不到类的错误
于是试了下本地采用scala(非spark)直接运行jar包,是可以找到SQLContextAPP类并执行的
即,错误现象总结为:
Intellij IDEA:可执行
本地启动Scala:可执行
提交至Spark:找不到执行主类
错误原因:
项目目录里manifest文件的内容在打包Bulid之后变掉了:
打包前:
Manifest-Version: 1.0
Main-Class: com.imooc.spark.SQLContextApp
打包后:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: pwendell
Build-Jdk: 1.6.0_65
Created-By: Apache Maven 3.2.2
不仅没了Main-CLass信息,还多出一些其他信息(jdk maven和我需要的版本还不一致)
原因众说纷纭,说是打包过程中无法读取manifest文件啦之类,其实这是Intellij IDEA的一个bug下面会说
解决方法:
以下是正确的打包过程:
1.进入Project Structure页面
2.左边树形区域选择Artifacts,点击+号,选择JAR--->From moudles with depenencies
3.会弹出【Create JAR from Moudles】对话框,点击Main Class栏后的【...】省略号,选择jar包要执行的主类,双击类名
4.可以看到主类已选中
5.接下来对后面两项进行选择(重要)
1、【JAR files from libraries】
选择 copy to the output and link via manifest
(需要选择这个选项来配置MANIFEST.MF的路径)
关于这两个选项的解释:
extract to the target JAR:将项目中所有依赖的jar包都打在一起
copy to the output and link via manifest:仅将项目打包
(由于我们是提交到spark集群上运行,不需要将所有依赖的jar包都打在一起,所以选择copy to the output and link via manifest就好)
2、【Directory for META-INF/MANIFEST.MF】
如图所示,红线部分是我project的路径,但按这个路径,在你接下来的Build过程中是找不到MANIFEST.MF文件的
这时就会自动生成一个,内容就会不对,我之前打包后MANIFEST信息变化就是因为这个原因引起的,这是Intellij IDEA的一个BUG
(http://stackoverflow.com/questions/15724091/how-to-run-a-jar-file-created-using-intellij-12
http://bglmmz.iteye.com/blog/2058785)
所以我们需要修改下MANIFEST.MF路径,前面部分不变,将路径中的scala改为resources
修改前:C:\Users\Administrator.PC-201709301524\IdeaProjects\ImoocSparkSQLProject\src\main\scala
修改后:C:\Users\Administrator.PC-201709301524\IdeaProjects\ImoocSparkSQLProject\src\main\resources
我的项目路径
上面信息配置好,点击OK后进入如下页面,
type上的other不用管它,也不用改成JAR,不然你又会陷入没有MANIFEST文件的循环中
勾选Include in project build
选好后点击OK
另外,这个Output directory路径就是一会儿jar包的存放路径,要记住哦,我的是:
C:\Users\Administrator.PC-201709301524\IdeaProjects\ImoocSparkSQLProject\out\artifacts\ImoocSparkSQLProject_jar
可以看到resources目录和MANIFEST文件都被创建;
双击MANIFEST.MF可确认文件内容,信息正确,可以看到Class-Path和Main CLass(在最下面,往下拖)都被创建
菜单栏选择Bulid---Artifact Build,会生成一个小面板,选择Build
可以在IDE的下方看到Building的进度
build完成之后可以在IDE左边的树形区域看到生成用于打包的target的目录和jar包的输出目录out都被创建
(我的是在out文件夹下,前面编辑的时候output directory中有写到,各位还请根据自己的实际情况找到输出路径)
展开ImoocSparkSQLProject_jar,可以看到项目的jar包
按照当时配置的output directory的路径下去找到jar包
解压确认下MANIFEST文件内容,内容正常,可以看到主类信息
Manifest-Version: 1.0
Main-Class: com.imooc.spark.SQLContextApp
Class-Path: oro-2.0.8.jar maven-settings-builder-3.0.jar slf4j-api-1.7
.16.jar objenesis-2.1.jar jackson-mapper-asl-1.9.11.jar asm-5.1.jar s
isu-guice-2.1.7-noaop.jar minlog-1.3.0.jar commons-net-2.2.jar jul-to
-slf4j-1.7.16.jar commons-collections-3.2.2.jar leveldbjni-all-1.8.ja
r stream-2.7.0.jar curator-client-2.6.0.jar spark-unsafe_2.11-2.2.0.j
ar spark-tags_2.11-2.2.0.jar plexus-interpolation-1.14.jar scalap-2.1
1.0.jar commons-httpclient-3.1.jar jackson-core-2.6.5.jar commons-cli
-1.2.jar commons-crypto-1.0.0.jar antlr4-runtime-4.5.3.jar univocity-
parsers-2.2.1.jar metrics-json-3.1.2.jar jcl-over-slf4j-1.7.16.jar js
r305-1.3.9.jar avro-ipc-1.7.7-tests.jar jersey-container-servlet-2.22
.2.jar hadoop-yarn-common-2.6.5.jar jersey-common-2.22.2.jar jackson-
annotations-2.6.0.jar guava-19.0.jar maven-model-3.0.jar jaxb-api-2.2
.2.jar commons-digester-1.8.jar spark-network-common_2.11-2.2.0.jar j
son4s-jackson_2.11-3.2.11.jar aether-util-1.7.jar hadoop-mapreduce-cl
ient-jobclient-2.6.5.jar bcprov-jdk15on-1.51.jar hadoop-hdfs-2.6.5.ja
r asm-commons-5.1.jar activation-1.1.1.jar aether-api-1.7.jar scala-x
ml_2.11-1.0.1.jar maven-plugin-api-3.0.jar hk2-api-2.4.0-b34.jar gson
-2.2.4.jar commons-lang3-3.5.jar spark-network-shuffle_2.11-2.2.0.jar
py4j-0.10.4.jar hadoop-client-2.6.5.jar maven-artifact-transfer-0.9.
0.jar maven-settings-3.0.jar metrics-graphite-3.1.2.jar spark-sketch_
2.11-2.2.0.jar maven-artifact-3.0.jar htrace-core-3.0.4.jar aether-ut
il-0.9.0.M2.jar avro-ipc-1.7.7.jar hadoop-common-2.6.5.jar apacheds-i
18n-2.0.0-M15.jar commons-beanutils-core-1.8.0.jar apacheds-kerberos-
codec-2.0.0-M15.jar maven-shade-plugin-3.0.0.jar kryo-shaded-3.0.3.ja
r ivy-2.4.0.jar jdom-1.1.3.jar parquet-hadoop-1.8.2.jar lz4-1.3.0.jar
snappy-java-1.1.2.6.jar spark-catalyst_2.11-2.2.0.jar jackson-databi
nd-2.6.5.jar api-asn1-api-1.0.0-M20.jar curator-framework-2.6.0.jar x
ercesImpl-2.9.1.jar java-xmlbuilder-1.0.jar hadoop-mapreduce-client-s
huffle-2.6.5.jar httpclient-4.3.6.jar jdependency-1.1.jar avro-mapred
-1.7.7-hadoop2.jar scala-library-2.11.8.jar commons-math3-3.4.1.jar a
sm-tree-5.1.jar asm-util-5.0.4.jar plexus-component-annotations-1.5.5
.jar commons-io-2.5.jar commons-compiler-3.0.0.jar scala-compiler-2.1
1.0.jar maven-aether-provider-3.0.jar plexus-utils-3.0.24.jar jersey-
guava-2.22.2.jar json4s-ast_2.11-3.2.11.jar hadoop-yarn-server-common
-2.6.5.jar javax.inject-2.4.0-b34.jar parquet-common-1.8.2.jar curato
r-recipes-2.6.0.jar api-util-1.0.0-M20.jar parquet-encoding-1.8.2.jar
log4j-1.2.17.jar hadoop-mapreduce-client-app-2.6.5.jar jackson-modul
e-paranamer-2.6.5.jar jetty-util-6.1.26.jar javax.ws.rs-api-2.0.1.jar
commons-beanutils-1.7.0.jar plexus-sec-dispatcher-1.3.jar xml-apis-1
.3.04.jar hadoop-yarn-client-2.6.5.jar commons-codec-1.10.jar maven-d
ependency-tree-2.2.jar zookeeper-3.4.6.jar mail-1.4.7.jar hadoop-mapr
educe-client-common-2.6.5.jar jersey-container-servlet-core-2.22.2.ja
r scala-parser-combinators_2.11-1.0.1.jar parquet-column-1.8.2.jar ha
doop-mapreduce-client-core-2.6.5.jar paranamer-2.3.jar spark-sql_2.11
-2.2.0.jar mx4j-3.0.2.jar chill-java-0.8.0.jar sisu-inject-plexus-1.4
.2.jar parquet-jackson-1.8.2.jar jersey-server-2.22.2.jar commons-con
figuration-1.6.jar commons-lang-2.6.jar protobuf-java-2.5.0.jar pyrol
ite-4.13.jar jackson-module-scala_2.11-2.6.5.jar xbean-asm5-shaded-4.
4.jar maven-common-artifact-filters-3.0.0.jar hadoop-annotations-2.6.
5.jar maven-model-builder-3.0.jar spark-launcher_2.11-2.2.0.jar netty
-3.9.9.Final.jar osgi-resource-locator-1.0.1.jar json4s-core_2.11-3.2
.11.jar jackson-jaxrs-1.9.13.jar javax.annotation-api-1.2.jar hk2-loc
ator-2.4.0-b34.jar compress-lzf-1.0.3.jar aether-spi-1.7.jar stax-api
-1.0-2.jar plexus-classworlds-2.2.3.jar maven-shared-utils-3.0.0.jar
plexus-cipher-1.4.jar maven-core-3.0.jar metrics-core-3.1.2.jar jacks
on-xc-1.9.13.jar base64-2.3.8.jar aopalliance-repackaged-2.4.0-b34.ja
r validation-api-1.1.0.Final.jar hk2-utils-2.4.0-b34.jar aether-impl-
1.7.jar jackson-core-asl-1.9.11.jar scala-reflect-2.11.8.jar xmlenc-0
.52.jar hadoop-yarn-api-2.6.5.jar spark-core_2.11-2.2.0.jar xz-1.0.ja
r metrics-jvm-3.1.2.jar javax.servlet-api-3.1.0.jar hadoop-auth-2.6.5
.jar avro-1.7.7.jar httpcore-4.3.3.jar sisu-inject-bean-1.4.2.jar chi
ll_2.11-0.8.0.jar slf4j-log4j12-1.7.16.jar janino-3.0.0.jar asm-analy
sis-5.0.4.jar unused-1.0.0.jar javassist-3.18.1-GA.jar jersey-client-
2.22.2.jar RoaringBitmap-0.5.11.jar parquet-format-2.3.1.jar maven-re
pository-metadata-3.0.jar jets3t-0.9.3.jar jersey-media-jaxb-2.22.2.j
ar commons-compress-1.4.1.jar netty-all-4.0.43.Final.jar
#.打包过程中的其他问题:manifest.mf already exists in vfs
:
这是因为你之前已经打过包了,那时已经生成一份MAMIFEST.MF文件了,需要到project的相应路径(就是你打包的时候选择生成META-INF/MANIFEST.MF的那个路径)下将其删除
比如我的是在项目的scr\main\resources中,果然有一份MAMIFEST.MF,是上次打包生成的,把这个文件删除再重新打包即可
如图所示,红线部分是我project的路径,但按这个路径打包是找不到MANIFEST.MF文件的
打包时就会自动生成一个,内容就会不对,我之前打包后MANIFEST信息变化就是因为这个原因引起的,由于找不到项目的MANIFEST文件,自动生成
所以我们需要修改下MANIFEST.MF路径,前面部分不变,将路径中的scala改为resources
修改前:C:\Users\Administrator.PC-201709301524\IdeaProjects\ImoocSparkSQLProject\src\main\scala
修改后:C:\Users\Administrator.PC-201709301524\IdeaProjects\ImoocSparkSQLProject\src\main\resources
Intellij IDEA打包文件manifest文件信息有误相关推荐
- Unity AssetBundle 依赖打包以及Manifest文件的使用(六)
下面两个物体对象依赖同一个材质球和贴图,为了减少AssetBundle包的大小我们可以把依赖的资源另外打包成一个共享的包. 依赖的资源AssetBundle包名设置为share 为打包的预制体命名: ...
- Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解
文章目录 前言 Rocksdb写流程图 WAL 原理分析 概述 文件格式 查看WAL的工具 创建WAL 清理WAL MANIFEST原理分析 概述 查看MANIFEST的工具 创建 及 清除 MANI ...
- java jar manifest文件,java打包jar,以及manifest文件使用说明
java打包jar,以及manifest文件使用说明 http://20921556.javaeye.com/blog/263974 关键字: java jar Java的一种文档格式,JAR文件非常 ...
- 【AssetBundle】七:打包生成的manifest文件
我们在之前知道了AssetBundle打包的时候除了生成AssetBundle包之外,还会生成.manifest文件,我们把它称作配置文件.从事Android开发的同学们一定不会对.AndroidMa ...
- webpack打包原理和manifest文件分析
打包工具要解决的问题: 文件依赖管理 梳理文件之间的依赖关系 资源加载管理 处理文件的加载顺序(先后时机)和文件的加载数量(合并.嵌入.拆分) 效率与优化管理 提高开发效率,完成页面优化 webpac ...
- uniapp:Google开发者证书信息有误,请重新填写相关信息 Android 证书文件不是有效的keystore文件Hbulider
Google开发者证书信息有误,请重新填写相关信息 Android 证书文件不是有效的keystore文件Hbulider 一开始一直按网上的方法生成证书发现生成出来的证书一直是无效的证书. 然后就想 ...
- IntelliJ IDEA 2021.2版文件显示图标有误的解决方法
IntelliJ IDEA 2021.2版文件显示图标有误的解决方法 以.xml文件为例. 此为错误图标 此为正确图标 右键该文件,点击Override File Type 选中xml即可
- py文件打包或apk_Python文件打包成exe很简单,如果安卓手机也能运行的软件你会吗...
前言 我相信很多小伙伴都知道怎么将Python的文件打包成exe,而且这个也非常的简单,一行代码就能轻松搞定:pyinstaller -F xxx.py 但是如果我们用Python开发一个小游戏或者一 ...
- 把Java程序打包成jar文件包并执行
把Java程序打包成jar文件包并执行 1.首先要确认自己写的程序有没有报错. 2.第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建的是java Project 打包步骤: ...
最新文章
- 网络工程师_要记录下来的一些题_3
- 第四章 Lync server 2010的安装
- 微软已经宣布自2009年4月14日起放弃对windows xp的主流支持
- golang 中string和int类型相互转换
- 进阶学习(4.2) JVM 常用配置参数, GC 参数
- (译文)JavaScript基础——JavaScript中的深拷贝
- 2007年10月14日的日记
- 网站加速和服务器加速区别,cdn加速与不加速区别
- java 字符串拆分成单个字符放到 list 集合
- PostgreSQL参数学习:vacuum_defer_clean_age
- 第十二:Pytest进阶之配置文件
- [转]正则表达式中re.match、re.search、re.findall的用法和区别
- Strassen算法
- T - hiho字符串 HihoCoder - 1485 (..map的使用把)
- 内蒙古电大计算机考试成绩查询成绩查询,中考查分系统
- digester java_JAVA Digester 简介
- 劳务派遣人员管理办法范文
- 人工智能NLP在金融领域的发展趋势和实践经验
- 2022可用的免费天气预报API接口
- 十大api接口平台(接口商)
热门文章
- ArrayAdapter适配器和SimpleAdapter适配器以及ListView的使用
- 使用OnClick报错
- 图片透视校正 java js_iOS 使用OpenCV 实现图片的透视校正
- 2012年职称计算机,2012年职称计算机考试:记事本
- 夺命雷公狗—玩转SEO---33---DEDE网站安全
- java Mysql人事管理系统zip_java毕业设计_springboot框架的企业行政人事管理系统
- RTOS的临界段知识详解
- Appium滑动解锁屏幕
- 启动游戏计算机丢失api,电脑游戏运行不了提示api-ms-win-crt-runtimel1-1-0.dll怎么解决...
- parseint与valueOf的区别