idea打包可运⾏scala代码的jar包
今天折腾了⼀天 研究 idea 打可运⾏ 代码的 jar 包。有些⼼得记录下来,供⼤家参考,希望能帮助到⼀些同事。
此前在⽹络上有⼀些关于打jar 包的资料,⼤都是⼀些转载,或者介绍的不是很详细。此篇是详细介绍打包过程以及思考推导⽅式,供⼤家参考。
此⽂章分为 1 IDEA 打可执⾏jar 包
2 idea 打可执⾏jar 包
两个部分介绍
IDEA 打可执⾏ jar 包
先创建scala project FILE-->new --> project -->scala
然后输⼊⾃⼰的项⽬名称 创建OBJECT MAIN
注意: 要先配置 jdk 环境和 scala 环境 否则程序会报错,本篇⽂章不过度引申此细节。
自己做oracle分布式数据库然后开始配置打包 File--->project structure --> Artifacts 然后点击 "+"
待出现弹窗后写⼊⾃⼰配置的主类 如图:
写⼊⾃⼰配的含有 main object 点击OK 然后 会显⽰如下界⾯
如上图:⿊⾊框代表你jar 的⽣成路径 , 红⾊框代表已经加⼊到打包⾥⾯的信息,绿⾊框代表你⾃此打包的被调⽤的主函数类,紫⾊框是IDEA 认为你有可能需要添加⼊jar 中的其他类库。java培训班大概多少钱
⼀切信息就绪点击OK
然后观察左侧 IDEA 会⾃动刷新变化 在src ⽬录下 idea ⾃动⽣成了 META_INF 这个⽂件夹 如图:
此处⽣成的MANIFEST.MF 是⾮常有⽤的为⽂件,先买⼀个官司,待会再讲这个⽂件。
⼀切就绪开始⽣成 可执⾏⽂件!
BUILD---->BUILD Artifact ----> BUILD
如图:
在⽣成路径下寻你⽣成的jar 包 如图:
然后⽤ java -jar 命令运⾏它
返回结果如图:
恭喜你! 你已经可以成功运⾏ scala 可执⾏jar ⽂件了!!
但是可以以此⽅法运⾏ maven 的 jar 吗?
开始配置maven ⼯程 添加maven 依赖
点击项⽬ ----右键 --->Add FrameWorkSupport -->maven 勾选
选择完之后系统会⾃动⽣成l⽂件 如图:
注意:此处为了演⽰⽅便排除其他⼲扰所以 pom⾥⾯没有设置任何依赖,只是初始l
然后打开maven 视图 view-->Tool Windows-->Maven Projects
如图:
此视图列举了 maven⽣命周期,以及各种插件,plugins下⾯的可以按照⽤户需求⾃⾏添加。
然后配置maven 本地依赖库 settings ---> 搜索maven
然后再次 执⾏上述步骤 打包 注意此处 再次打包需要删除 原来的 META -INF ⽂件夹,否则IDEA不会按照新maven⼯程⽅式打包!!
删除⽂件再次打包,然后调⽤java -jar 你的包名 .jarcurses怎么读
发现如下错误,如图:
思考:仅仅引⼊maven 以同样⽅式打包却会出现不到main 函数,貌似jar包⾥⾯没有指定main 函数⼊⼝。但是没有改任何配置啊?明明主类已经指定?
看来maven⼯程的打包⽅式不应该⽤idea 原⽣⽅式打包。
查看jar ⽂件⾥信息。我们会发现
解释: 红⾊框为记录关于jar 包的⼀些基本信息,绿⾊框 scala 是scala 程序依赖, ⿊⾊框 testscalajar3 你写的程序包,紫⾊框 ⼀些配置⽂件。
进⼊ META-INF 发现⾥⾯有⼀个 MANIFEST.MF 的配置⽂件. 打开它
貌似记录了⼀⼤堆有的没的 ,没啥价值,不死⼼,再看看之前运⾏成功的jar MANIFEST.MF 信息 内容很简单只有两⾏代码
idea配置artifacts如图:
这个MaNIFEST.MF和前者只有 这个区别 在前者的 MaNiFEST.MF ⾥⾯没有到 Main-Class 标⽰
尝试 :把此⾏拷贝到 之前的 jar 对应⽂件中如图:
然后放⼊jar 包。接着执⾏ java -jar 指令 程序正常运⾏ubuntu安装到移动硬盘
但是此种⽅法 每次打jar 包都要频繁操作 太过于⿇烦.所以采⽤第⼆种⽅式 idea Maven 打jar 包⽅式
Maven 打可执⾏Jar 包。⽹上介绍的可以参考借鉴随便拿来⼀种配置在l 中如图
在右侧的IDEA会出现依赖显⽰
貌似⼀切就绪 直接点击 lifcycle --->package ⽣成 jar ⽂件
注意:此种⽣成⽅式 需要你提前删除 ⽬标⽂件夹下⾯⽂件,否则会报错 。
删除该⽂件夹下⾯所有 ⽂件 再点击 package 观看IDEA 控制台 打包成功
在target ⽂件夹下⾯⽣成了 testScalaJar-1.0-SNAPSHOT-jar-with-dependencies.jar ⽂件
然后打开 看看有没有主函数
有! 看来可以安⼼执⾏了 。执⾏ java -jar
出现如下问题:
为什么 还会报这种问题?但是貌似问题和 没有主程序清单 错误有所不同,在观察jar 包。
竟然发现 没有⾃⼰的 stscalajar.streamingTest.class ⽽只有 testJava.class ... 也就是说只有 .java的⽂件被编译了,⽽ .scala的⽂件没有被编译!!
结论: maven 默认只编译java 的⽂件,⽽不会编译scala ⽂件。但是maven 提供了 能够编译scala 的类库。因此再次改造l
加⼊如下 plugin 此插件是Maven ⽤来编译 scala 的插件
<plugin>
<groupId>org.scala-tools</groupId>
女生英文名yannie<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
然后删除target 下所有⽂件再次点击package 进⾏打包
再次执⾏ java -jar 命令 程序 正常执⾏!!
总结:两种⽅式都可以实现 打maven 运⾏包.但后者更加便捷,⽽且maven 提供了丰富的plugin插件,以及优雅的打包,编译等⽅式(只需点击,⽽不⽤像eclipse那样输⼊maven指令)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论