intellij idea 打可运行scala jar 包的两种方式

今天折腾了一天 研究 idea 打可运行scala 代码的 jar 包。有些心得记录下来,供大家参考,希望能帮助到一些同事。

此前在网络上有一些关于打jar 包的资料,大都是一些转载,或者介绍的不是很详细。此篇是详细介绍打包过程以及思考推导方式,供大家参考。

此文章分为 1 IDEA 打可执行jar 包 

                    2 idea maven 打可执行jar 包 

两个部分介绍


IDEA 打可执行 jar 包

先创建scala project FILE-->new --> project -->scala 

              


然后输入自己的项目名称 创建OBJECT MAIN





注意: 要先配置 jdk 环境和 scala 环境 否则程序会报错,本篇文章不过度引申此细节。

然后开始配置打包 File--->project structure --> Artifacts 然后点击 "+"

待出现弹窗后写入自己配置的主类 如图:


写入自己配的含有 main object  点击OK 然后 会显示如下界面


如上图:黑色框代表你jar 的生成路径 , 红色框代表已经加入到打包里面的信息,绿色框代表你自此打包的被调用的主函数类,紫色框是IDEA认为你有可能需要添加入jar 中的其他类库。

一切信息就绪点击OK 

然后观察左侧 IDEA 会自动刷新变化 在src 目录下 idea 自动生成了 META_INF 这个文件夹 如图:


此处生成的MANIFEST.MF 是非常有用的为文件,先买一个官司,待会再讲这个文件。

一切就绪开始生成 可执行文件!

BUILD---->BUILD Artifact ----> BUILD

如图:


在生成路径下寻找你生成的jar 包 如图:



然后用 java -jar 命令运行它 

返回结果如图:


恭喜你! 你已经可以成功运行 scala 可执行jar 文件了!!

但是可以以此方法运行 maven 的 jar 吗?

开始配置maven 工程 添加maven 依赖

点击项目 ----右键 --->Add FrameWorkSupport -->maven 勾选



选择完之后系统会自动生成POM.xml文件 如图:


注意:此处为了演示方便排除其他干扰所以 pom里面没有设置任何依赖,只是初始pom.xml

然后打开maven 视图 view-->Tool Windows-->Maven Projects 

如图:


此视图列举了 maven生命周期,以及各种插件,plugins下面的可以按照用户需求自行添加。

然后配置maven 本地依赖库 settings ---> 搜索maven



然后再次 执行上述步骤 打包 注意此处 再次打包需要删除 原来的 META -INF 文件夹,否则IDEA不会按照新maven工程方式打包!!




删除文件再次打包,然后调用java -jar  你的包名 .jar 

发现如下错误,如图:



思考:仅仅引入maven 以同样方式打包却会出现找不到main 函数,貌似jar包里面没有指定main 函数入口。但是没有改任何配置啊?明明主类已经指定?

看来maven工程的打包方式不应该用idea 原生方式打包。

查看jar 文件里信息。我们会发现


解释: 红色框为记录关于jar 包的一些基本信息,绿色框 scala 是scala 程序依赖, 黑色框 testscalajar3 你写的程序包,紫色框 一些配置文件。

进入 META-INF 发现里面有一个 MANIFEST.MF 的配置文件. 打开它

貌似记录了一大堆有的没的 ,没啥价值,不死心,再看看之前运行成功的jar  MANIFEST.MF 信息 内容很简单只有两行代码

如图:


这个MaNIFEST.MF和前者只有 这个区别 在前者的 MaNiFEST.MF 里面没有找到 Main-Class 标示 

尝试 :把此行拷贝到 之前的 jar 对应文件中如图:



然后放入jar 包。接着执行 java -jar 指令 程序正常运行!!!

但是此种方法 每次打jar 包都要频繁操作 太过于麻烦.所以采用第二种方式 idea Maven 打jar 包方式


Maven 打可执行Jar 包。网上介绍的可以参考借鉴随便拿来一种配置在POM.xml 中如图

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>groupId</groupId>
    <artifactId>testScalaJar</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <!--你的诸多依赖
 	-->
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.5</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.testscalajar.StreamingTest</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

在右侧的IDEA会出现依赖显示


貌似一切就绪 直接点击 lifcycle --->package 生成 jar 文件 

注意:此种生成方式 需要你提前删除 目标文件夹下面文件,否则会报错 。


删除该文件夹下面所有 文件 再点击 package 观看IDEA 控制台 打包成功


在target 文件夹下面生成了  testScalaJar-1.0-SNAPSHOT-jar-with-dependencies.jar 文件 

然后打开 看看有没有主函数 


有! 看来可以安心执行了 。执行 java -jar 

出现如下问题:


为什么 还会报这种问题?但是貌似问题和 没有主程序清单 错误有所不同,在观察jar 包。


竟然发现 没有自己的 com.testscalajar.streamingTest.class 而只有 testJava.class ... 也就是说只有 .java的文件被编译了,而 .scala的文件没有被编译!! 

结论: maven 默认只编译java 的文件,而不会编译scala 文件。但是maven 提供了 能够编译scala 的类库。因此再次改造POM.xml


加入如下 plugin 此插件是Maven 用来编译 scala 的插件

<plugin>
    <groupId>org.scala-tools</groupId>
    <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指令)
 

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值