IDEA对使用了第三方依赖jar包的非Maven项目打jar包的问题(图文详解)

下面是“IDEA对使用了第三方依赖jar包的非Maven项目打jar包的问题(图文详解)”的完整攻略。

问题背景

在非Maven项目中,有时会使用第三方依赖的jar包,运行时需要将这些jar包添加到classpath中。但是,如果要将这些依赖打成一个jar包,传递给其他人使用,就会遇到问题:打出的jar包无法运行,因为缺少第三方依赖的jar包,无法加载类。

解决方案

为了解决这个问题,我们需要将所有的代码和依赖打包成一个可执行的jar包,即所谓的“可执行jar包”或“fatjar”。

第一步:导出jar包

首先,在IDEA中,我们需要导出一个jar包,在File -> Project Structure中打开Project Structure面板。在弹出的对话框中,选择左侧的Artifacts选项卡,然后点击右上角的加号,选择JAR -> From modules with dependencies。填写JAR files from librariesMain Class选项,并点击OK

第二步:配置构建选项

然后,在File -> Settings中打开Settings面板。在弹出的对话框中,选择左侧的Build, Execution, Deployment选项卡,然后选择Build Tools -> Maven -> Runner。勾选Delegate IDE build/run actions to Maven,然后点击OK保存设置。

第三步:编译项目

接下来,我们需要在终端中使用Maven构建项目。首先,在IDEA中打开终端,输入以下命令来检查您的系统是否正确安装Java和Maven:

java -version
mvn -version

然后,在项目根目录下,执行以下命令进行编译:

mvn clean compile package

如果编译成功,会在项目的target目录下生成一个名为<artifactId>-<version>.jar的jar包。此时的jar包只包含了项目代码,不包含第三方依赖的jar包。

第四步:将依赖jar包添加到可执行jar包中

为了将依赖jar包添加到打包后的可执行jar包中,我们需要以下步骤:

  • 将依赖jar包打成一个lib目录,并放置在可执行jar包的同级目录下。
  • 修改MANIFEST.MF文件,添加Class-Path属性,指定依赖jar包的相对路径。例如:Class-Path: lib/dep1.jar lib/dep2.jar

示例1

以下是一个项目的结构

myproject/
    src/
        main/
            java/
                com/
                    myproject/
                        Main.java
            resources/
                META-INF/
                    MANIFEST.MF
    lib/
        dep1.jar
        dep2.jar

为了将依赖jar包打成一个lib目录,并放置在可执行jar包的同级目录下,可以使用以下Maven插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

在执行mvn package时,依赖jar包将会被自动打到lib目录中。

修改MANIFEST.MF文件,添加Class-Path属性,指定依赖jar包的相对路径。例如:

Manifest-Version: 1.0
Class-Path: lib/dep1.jar lib/dep2.jar
Main-Class: com.myproject.Main

这样,我们就可以在项目目录下执行以下命令来执行生成的可执行jar包:

java -jar myproject-1.0-SNAPSHOT.jar

示例2

以下是另一个项目的结构:

myproject/
    src/
        com/
            myproject/
                Main.java
    lib/
        dep1.jar
        dep2.jar
    build.xml

假设该项目是一个Ant项目,我们想要将其打成一个可执行jar包。一种方法是在Ant脚本中,使用以下Ant任务将依赖jar包复制到指定目录:

<target name="copy-lib">
    <mkdir dir="${build.dir}/lib"/>
    <copy todir="${build.dir}/lib">
        <fileset dir="${lib.dir}">
            <include name="dep1.jar"/>
            <include name="dep2.jar"/>
        </fileset>
    </copy>
</target>

然后,我们可以使用以下Ant任务,在MANIFEST.MF文件中指定Class-path属性,并打包项目:

<target name="jar">
    <mkdir dir="${build.dir}/jar"/>
    <manifest file="${build.dir}/MANIFEST.MF">
        <attribute name="Manifest-Version" value="1.0"/>
        <attribute name="Main-Class" value="com.myproject.Main"/>
        <attribute name="Class-Path" value="lib/dep1.jar lib/dep2.jar"/>
    </manifest>
    <copy todir="${build.dir}/jar">
        <fileset dir="${build.dir}/classes"/>
    </copy>
    <jar destfile="${build.dir}/jar/myproject.jar" basedir="${build.dir}/jar" manifest="${build.dir}/MANIFEST.MF"/>
</target>

这样,我们就可以在项目目录下执行以下命令来执行生成的可执行jar包:

java -jar myproject.jar

到此为止,“IDEA对使用了第三方依赖jar包的非Maven项目打jar包的问题”已经得到了解决。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IDEA对使用了第三方依赖jar包的非Maven项目打jar包的问题(图文详解) - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • javascript操作ASP.NET服务器控件

    首先讲解一下”javascript操作ASP.NET服务器控件”的完整攻略。 操作ASP.NET服务器控件的前提条件 在进行javascript操作ASP.NET服务器控件之前,我们需要先了解几个前提条件: 确保已加载jquery或其他js类库 引用ASP.NET服务器控件的ID或Class名称 掌握ASP.NET服务器控件的相关属性和事件 操作ASP.NE…

    other 2023年6月26日
    00
  • C/C++语言中全局变量重复定义问题的解决方法

    C/C++语言中全局变量重复定义问题的解决方法 在C/C++语言中,全局变量的重复定义是一个常见的问题。当多个源文件中都包含了同名的全局变量时,编译器会报错,提示重复定义。为了解决这个问题,我们可以采取以下几种方法。 1. 使用extern关键字声明全局变量 在多个源文件中,我们可以使用extern关键字来声明全局变量,而不是在每个源文件中都定义它。这样做的…

    other 2023年7月28日
    00
  • 如何在华军软件园安全下载软件

    以下是关于“如何在华军软件园安全下载软件”的完整攻略,包含两个示例。 如何在华军软件园安全下载软件? 华军软件园是国内知名的软件下载网站之一,提供了大量的软件资源。为了保证下载软件的安全性,我们需要注意以下几点: 1. 下载前先了解软件 在下载软件之前,需要先了解软件的基本信息,包括软件名称、版本、大小、开发商、简介等。我们可以通过查看软件的详细介绍来获取这…

    other 2023年5月9日
    00
  • 微信小程序实现图片预加载组件

    请允许我详细讲解“微信小程序实现图片预加载组件”的完整攻略。 首先,我们需要理解什么是图片预加载。图片预加载是指在页面正式展示前,提前把相关图片下载到本地缓存,使得用户在浏览时可以达到流畅的体验。而在微信小程序中实现图片预加载则需要用到小程序提供的一些API和方法。 下面,我将讲述具体的实现步骤: 步骤一:获取待加载的图片列表 获取待加载的图片列表的方式有很…

    other 2023年6月25日
    00
  • 剑指Offer之Java算法习题精讲二叉树专题篇上

    剑指Offer之Java算法习题精讲二叉树专题篇上 一、前言 二叉树是算法中非常重要的数据结构,也是面试时常被考察的知识点。在这篇文章中,我们会详细讲解剑指Offer中关于二叉树的Java算法习题精讲,帮助读者更好地掌握二叉树的相关知识。 二、题目汇总 下面是本篇文章中涉及的二叉树习题题目汇总: 题目编号 题目名称 题目描述 4 重构二叉树 输入前序遍历和中…

    other 2023年6月27日
    00
  • php微信开发之自定义菜单实现

    PHP微信开发之自定义菜单实现攻略 本文旨在介绍如何使用PHP实现微信公众号的自定义菜单功能。 步骤一:获取access_token 在使用自定义菜单之前,我们需要先获取access_token。可以通过以下的代码块来实现access_token的获取: $url = "https://api.weixin.qq.com/cgi-bin/token…

    other 2023年6月25日
    00
  • iOS 14.3 Beta 3(18C5061a)怎么升级?iOS 14.3 Beta 3(18C5061a)更新介绍

    iOS 14.3 Beta 3(18C5061a)升级攻略 iOS 14.3 Beta 3(18C5061a)是苹果公司最新的测试版操作系统,本攻略将详细介绍如何升级到该版本,并提供两个示例说明。 步骤一:备份数据 在升级操作系统之前,建议您先备份设备中的数据。这样可以确保在升级过程中不会丢失任何重要的信息。您可以通过iCloud或iTunes进行备份。 步…

    other 2023年8月3日
    00
  • 解压rpm包的linux命令及rpm命令使用简介

    解压RPM包的Linux命令及RPM命令使用简介 在Linux系统中,可以使用rpm命令来管理RPM包。以下是解压RPM包的详细步骤: 首先,使用rpm2cpio命令将RPM包转换为cpio格式。示例命令如下: shell rpm2cpio package.rpm > package.cpio 这个命令将把名为package.rpm的RPM包转换为pa…

    other 2023年10月13日
    00
合作推广
合作推广
分享本页
返回顶部