IDEA如何打包可运行jar的一个问题。

本文介绍如何使用IntelliJ IDEA将Java项目打包成可独立运行的JAR文件,并将第三方依赖放置于lib目录中。

背景:

有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包;或者某些项目不是WEB应用,纯粹是后台应用,发布时,也需要打成可运行的JAR包。并且,如果依赖第三方jar时,又不希望第三方jar也打入最终的可运行jar包,并且还希望,组织下目录结构(如把第三方jar文件,放到最终可运行jar包的并行目录lib下)

 

开发环境

OS: Windows 8.1

JDK: 1.7.0

开发工具: IntelliJ IDEA 13.1.1

 

步骤:

1. 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷键Ctrl+Alt+Shift+S)。



 

2. 在弹出的窗口中左侧选中"Artifacts",点击"+"选择jar,然后选择"from modules with dependencies"。



 

3. 在配置窗口中配置"Main Class"。



 

4. 选择“Main Class”后,选择“copy to the output  and link via manifest”,配置“Directory for META-INF/MAINFEST.MF”,此项配置的缺省值是:D:\workshop\DbUtil\src\main\java,需要改成:D:\workshop\DbUtil\src\main\resources,如果不这样修改,打成的jar包里没有包含META-INF/MAINFEST.MF文件,这个应该是个IDEA的BUG(参考:http://stackoverflow.com/questions/15724091/how-to-run-a-jar-file-created-using-intellij-12),配置完成后如下图所示,点击OK进入下一步。(如果选择“extract to the target jar”,即把第三方jar文件,打入最终的可运行jar包时,可以不修改“Directory for META-INF/MAINFEST.MF”的配置,用缺省值即可


 

5. 右键“<output root>”,选择“Create Directory”,输入目录名:lib



 

6. 用鼠标按住第三方jar,拖入<output root>下的lib目录下



 

7. 用鼠标选中我们将要打出的jar包文件,点击下方“Class Path:”后面的按钮,在“Edit Classpath”窗口中,将每个第三方jar文件前加上相对路径:lib\,形成如:lib\xxx.jar的形式,这个目录“lib”,就是前面输入的那个“lib”,这里如果第三方jar很多的话,可以在“Edit Classpath”窗口中,用鼠标选中所有第三方jar,然后Ctrl+X,把内容cut & copy到UltraEdit里,用列格式一下子全部修改好,再paste到“Edit Classpath”窗口中。完成后如下所示:


 

8. 完成后,点击OK,Apply等按钮,回到IDEA的主菜单,选择“Build - Build Artifacts”下的“Build”或者“Rebuild”即可生成最终的可运行的jar,并把第三方jar放到和此jar并行的lib目录下,用winrar打开目标jar,可以看到META-INF/MAINFEST.MF文件被正确包含,内容也正确。


 

9. 在jar包的输出目录下,执行命令:java -jar xxx.jar,即可运行jar文件。

### IntelliJ IDEA 中 JavaFX 项目打包可运行 JAR 文件的教程 在 IntelliJ IDEA 中将 JavaFX 项目打包可运行JAR 文件需要一些特定的步骤,因为 JavaFX 不再包含在 JDK 中(从 JDK 11 开始),因此需要手动配置模块路径和依赖项[^1]。以下是详细的说明: #### 配置环境 1. **安装 JavaFX SDK**:下载并解压 JavaFX SDK,并将其放置在一个固定目录下,例如 `D:\software\javafx-sdk-17.0.13`[^2]。 2. **设置模块路径**:确保在运行或调试时通过命令行参数指定模块路径,例如: ```bash --module-path D:\software\javafx-sdk-17.0.13\lib --add-modules javafx.controls,javafx.fxml ``` #### 创建 JavaFX 项目 1. 打开 IntelliJ IDEA,选择 `File > New > Project`,然后选择 `JavaFX` 模板[^4]。 2. 配置项目的 JDK 版本(建议使用 JDK 11 或更高版本)以及 JavaFX SDK 的模块路径。 #### 添加依赖项 1. 在项目中导入 JavaFX SDK 的库文件。可以通过以下方式完成: - 转到 `File > Project Structure > Modules > Dependencies`。 - 点击 `+` 按钮,选择 `JARS or Directories`,然后添加 JavaFX SDK 的 `lib` 目录下的所有 `.jar` 文件[^3]。 #### 编辑功能 1. 根据需求开发 JavaFX 应用程序的功能。 2. 如果使用了 FXML 文件,可以通过右键点击 FXML 文件并选择 `Open in Scene Builder` 来设计界面[^3]。 3. 确保所有资源文件(如 FXML 文件、图片等)与生成的类文件位于同一路径下,以避免运行时找不到资源的问题。 #### 配置工件 (Artifact) 1. 转到 `File > Project Structure > Artifacts`。 2. 点击 `+` 按钮,选择 `JavaFX Application`,然后从模块列表中选择主模块[^4]。 3. 在 `Output Layout` 部分,点击加号将项目中用到的所有外部 JAR 包添加进来,包括 JavaFX SDK 的库文件[^3]。 4. 确保主类已正确配置为项目的入口点。 #### 构建 JAR 文件 1. 转到 `Build > Build Artifacts > Build`。 2. 构建完成后,可以在项目的 `out/artifacts/` 目录下找到生成的 JAR 文件[^4]。 #### 运行 JAR 文件 由于 JavaFX 不再包含在标准 JDK 中,运行生成的 JAR 文件时需要显式指定模块路径。例如: ```bash java --module-path D:\software\javafx-sdk-17.0.13\lib --add-modules javafx.controls,javafx.fxml -jar your-app.jar ``` #### 示例代码 以下是一个简单的 JavaFX 主类示例: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class MainApp extends Application { @Override public void start(Stage primaryStage) { Label label = new Label("Hello, JavaFX!"); StackPane root = new StackPane(); root.getChildren().add(label); Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("JavaFX Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` ### 注意事项 - 确保在运行时提供的模块路径与构建时一致[^2]。 - 如果项目中有多个 FXML 文件或其他资源文件,建议将它们与生成的类文件放在同一路径下,以避免加载失败。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值