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

yizhihongxing

下面是“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日

相关文章

  • Vue.js构建你的第一个包并在NPM上发布的方法步骤

    下面我会详细讲解Vue.js构建你的第一个包并在NPM上发布的方法步骤,包括以下几个步骤: 初始化项目并创建组件 配置打包、发布到NPM 1. 初始化项目并创建组件 首先,我们需要使用Vue CLI来初始化我们的项目。在终端中运行以下命令: vue create my-first-package 接着,我们需要创建一个名为MyComponent.vue的组件…

    other 2023年6月27日
    00
  • jquery的几种页面加载完执行三种方式

    jQuery的几种页面加载完执行三种方式 在jQuery中,有多种方式可以在页面加载完毕后执行JavaScript代码。本攻略将详细讲解jQuery的几种页面加载完执行三种方式,包括使用$(document).ready()、$().on(‘load’, function(){})和$(function(){})三种方式的原理、实现方法和示例说明。 $(do…

    other 2023年5月7日
    00
  • 通过命令行方式批量设置保留IP地址的代码

    在命令行方式下,可以通过DHCP服务器来为本网络中的主机分配IP地址。在此过程中,我们有时需要保留特定的IP地址,以便将其分配给指定的主机。下面是一份完整的攻略,教你如何通过命令行方式批量设置保留IP地址的代码。 1. 配置DHCP服务器 首先,我们需要配置DHCP服务器来设置保留IP地址。在Linux系统中,可以通过修改/etc/dhcp/dhcpd.co…

    other 2023年6月26日
    00
  • C++类与对象的详细说明2

    C++类与对象的详细说明2 1. 构造函数和析构函数 1.1 构造函数 构造函数是一种特殊的成员函数,它会在对象被创建时自动调用。构造函数可以用来初始化类的成员变量,或进行一些必要的初始化操作。在C++中,类可以拥有多个构造函数,这些构造函数的名称与类名相同,但可以拥有不同的参数列表。 下面是一个简单的示例代码,展示了如何声明和定义一个构造函数: class…

    other 2023年6月26日
    00
  • 关于web服务:httpget请求的最大长度?

    关于Web服务: HTTP GET请求的最大长度 在Web服务中,HTTP GET请求是一种常见的请求类型。但是,GET请求的URL长度是有限制的。以下是关于Web服务: HTTP GET请求的最大长度的完整攻略,包括常见问题和两个示例说明。 常见问题 1. HTTP GET请求的最大长度是多少? HTTP GET请求的最大长度取决于浏览器和服务器的限制。通…

    other 2023年5月9日
    00
  • 微信小程序websocket聊天室的实现示例代码

    关于“微信小程序websocket聊天室的实现示例代码”,下面是详细的攻略。 1.什么是WebSocket WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议与HTTP协议属于同一级别,所以在建立连接时使用的是HTTP请求,只不过请求头的一些字段不同。与 HTTP 协议不同的是,WebSocket在…

    other 2023年6月27日
    00
  • Excel 2010中控件的使用以及隐藏组合框的方法图文介绍

    Excel 2010中控件的使用以及隐藏组合框的方法 Excel 2010中有许多控件可以帮助我们更好地完成工作任务。下面我们来介绍一些控件的使用方法,同时也探讨如何隐藏组合框。 常见控件的使用方法 文本框 1. 插入文本框 在Excel 2010的工具栏中,选择“开发工具”->“插入”->“文本框”可以插入文本框。然后你可以在文本框中键入文本,…

    other 2023年6月27日
    00
  • MySQL表的创建及字段介绍(小白入门篇)

    MySQL表的创建及字段介绍(小白入门篇) MySQL是一个广泛使用的关系型数据库管理系统,学习如何创建表及字段是MySQL的基础部分。在本文中,我们将介绍MySQL表的创建及字段的基本概念。 创建MySQL表的步骤 创建MySQL表的过程通常包括以下几个步骤: 选择一个合适的数据库来创建表。 设计表的结构:定义表的列,设置每一列的属性。 创建表:使用CRE…

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