问题起因
本人在 Windows 上用 IDEA 编写一个简单的 Kotlin 程序,其中需要用 Jsoup 等库。该程序将拷贝到服务器上运行。由于服务器环境没有 Jsoup 等库,我希望在 Windows 上完成程序的打包,并把 Jsoup 等库包含到生成的 Jar 内,以此实现在另一环境顺利运行。
参考配置
在此列出我的软件版本和配置。如果你的版本跟我不一样,那么后续过程或许会有差别(会差多少我也不知道捏……)。
IDE: IntelliJ IDEA 2022.1 Community
项目配置:Kotlin Maven
Java 运行时环境:Java 17
操作步骤
在 pom.xml 加入依赖
首先,需要在 pom.xml
文件内加入依赖。本例中需要使用 Jsoup 和 Kotlinx Coroutines 库,因此加入如下内容:
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core -->
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core</artifactId>
<version>1.6.1</version>
<type>pom</type>
</dependency>
构建一次项目
使用 Build
-> Build Project
完成一次构建,生成 class 文件。
class 文件默认在 target
目录下。
编辑项目结构
前往 File
-> Project Structure
依次点击 Artifacts
,+
,JAR
,Empty
。
之后,你会看到下方界面:
在 Name
位置可以设置包的名称。
下方两栏中,左边是打包之后包里的内容,右边是可以选的库。
我们先把库加入进去。
在右边列表内找到需要添加的库,右键,选择 Extract Into Output Root
。如此,该库将被打包到我们的程序包文件中。
我们将 Kotlin 运行库、Jsoup和Kotlin协程库添加到打包目标内,得到如下图所示:
然后,我们要将我们自己的程序包包含进来。我们按照自己的软件包结构创建文件夹。由于我的程序包结构很简单,两个 kt 文件的包都设的是 tjnewssearchengine,我只需要创建一个文件夹即可。
创建完毕如下图所示:
接下来,将我们的程序生成的 class 文件包含进来。
文件位于 taregt
路径下。
添加完毕,选择这个文件夹,点击上方的向上按钮将它移动到最开头的位置。
当然,我们的程序可能包含 main 函数。需要指定它的位置。
指定 main 的位置,相当于指定 MANIFEST.MF
的位置。我们先要创建该文件,在文件内设置 main 函数位置信息,然后就像添加 class 文件一样,将它添加到 META-INF
文件夹内。
添加次文件的过程可以简化:点击左栏最上面那个 .jar 文件,下方会出现 Manifest File
选择框。用它选中我们的 MANIFEST.MF
文件即可。
打包
点击右下角 Ok
保存配置。在 IntelliJ IDEA 的 Build
菜单内选择 Build Artifacts
,在弹出菜单中选择我们刚创建的结构,并点击 Build
。稍等片刻,即可完成打包。
生成的 Jar 文件位于 out/artifacts
目录内。该包基于我们选中的类构建,并已包含我们的项目需要的依赖库。