idea打包jar 纯java项目和Maven项目 找不到主类 缺少依赖 Maven Spring Boot默认使用Logback作为日志框架,把它修改为org.apache.log4j

idea打包jar 纯java项目

在这里插入图片描述
输出D:\002me\003myproject\SpiderProj\out\artifacts\Spider_jar\Spider.jar
运行java -jar Spider.jar
在这里插入图片描述

idea打包jar Maven项目

Maven将本地jar打入到jar包

我最终OK的发出来。
先clean install package
java -jar .\target\hsm-0.0.1-SNAPSHOT.jar
看到依赖库jdbc.jar已经加载了。
在这里插入图片描述

在这里插入图片描述

报缺少本地依赖库是库“ true”,如果是非spring-boot项目我就不知道了。
报找不到主类是少“ maven-jar-plugin”插件。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>hsm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hsm</name>
    <description>hsm</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.ehsm</groupId>
            <artifactId>EHSMApi</artifactId>
            <version>2.3.6</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/EHSM-v2.3.9-20231208.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.ghsm</groupId>
            <artifactId>GHSMApi</artifactId>
            <version>2.3.6</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/GHSMAPI-v2.4.4-20240205.01-pg.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.tasshsmbaselib</groupId>
            <artifactId>TassHsmBaseLib</artifactId>
            <version>2.3.6</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/TassHsmBaseLib-1.5.2.4-pg.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.tasshsmlib</groupId>
            <artifactId>TassHsmLib</artifactId>
            <version>2.3.6</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/TassHsmLib-SJJ1310-1.8.0.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>gnu.io</groupId>
            <artifactId>nrjavaserial</artifactId>
            <version>5.2.1</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/nrjavaserial-5.2.1.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>2.20.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/json-20230618.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector</artifactId>
            <version>8.1.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/mysql-connector-j-8.1.0.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.sqlite</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.42.0.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/sqlite-jdbc-3.42.0.0.jar</systemPath>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.log4j</groupId>-->
<!--            <artifactId>log4j-core</artifactId>-->
<!--            <version>2.20.0</version>-->
<!--            <scope>system</scope>-->
<!--            <systemPath>${project.basedir}/src/main/resources/lib/log4j/log4j-core-2.20.0.jar</systemPath>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>com.log4j.api</groupId>-->
<!--            <artifactId>log4j-api</artifactId>-->
<!--            <version>2.20.0</version>-->
<!--            <scope>system</scope>-->
<!--            <systemPath>${project.basedir}/src/main/resources/lib/log4j/log4j-api-2.20.0.jar</systemPath>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>com.log4j.12.api</groupId>-->
<!--            <artifactId>log4j-1.2-api</artifactId>-->
<!--            <version>2.20.0</version>-->
<!--            <scope>system</scope>-->
<!--            <systemPath>${project.basedir}/src/main/resources/lib/log4j/log4j-1.2-api-2.20.0.jar</systemPath>-->
<!--        </dependency>-->
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- maven编译打包将引用的jar包一起打包 -->
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>



            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                  <skipTests>true</skipTests> <!--  跳过测试-->
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.kif.MainFrame</mainClass> <!-- 指定主类 -->
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

<!--            <plugin>-->
<!--                <artifactId>maven-assembly-plugin</artifactId>-->
<!--                <version>3.3.0</version> &lt;!&ndash; 使用最新版本 &ndash;&gt;-->
<!--                <configuration>-->
<!--                    <archive>-->
<!--                        <manifest>-->
<!--                            <mainClass>com.kif.MainFrame</mainClass>-->
<!--                        </manifest>-->
<!--                    </archive>-->
<!--                    <descriptorRefs>-->
<!--                        <descriptorRef>jar-with-dependencies</descriptorRef>-->
<!--                    </descriptorRefs>-->
<!--                </configuration>-->
<!--                <executions>-->
<!--                    <execution>-->
<!--                        <id>make-assembly</id> &lt;!&ndash; 这里的id可以随便取 &ndash;&gt;-->
<!--                        <phase>package</phase> &lt;!&ndash; 绑定到package生命周期阶段 &ndash;&gt;-->
<!--                        <goals>-->
<!--                            <goal>single</goal> &lt;!&ndash; 执行assembly的single目标 &ndash;&gt;-->
<!--                        </goals>-->
<!--                    </execution>-->
<!--                </executions>-->
<!--            </plugin>-->
        </plugins>
    </build>

</project>

如果Maven项目也用上面纯java的方式打包,也能打包但运行会提示找不到主类。
java -jar D:\010F200\svn\F200KIF_FT\hsm\hsm\out\artifacts\hsm_jar\hsm.jar
Error: Could not find or load main class com.kif.MainFrame
Caused by: java.lang.ClassNotFoundException: com.kif.MainFrame

要使用Maven项目在IntelliJ IDEA中打包为JAR文件,您可以执行以下步骤:

在这里插入图片描述
如果maven右侧窗口里显示null 解决办法:关闭idea,删除文件夹.idea,然后重新打开。

  1. 打开IntelliJ IDEA并加载您的Maven项目。

  2. 在项目结构中确保您的项目正确配置了Maven。

  3. 确保您的项目中有一个pom.xml文件,其中包含了打包配置。
    pom.xml文件中配置打包方式通常涉及到配置<build>元素和<plugins>元素。以下是一个简单的pom.xml示例,演示了如何配置Maven项目以将其打包为可执行的JAR文件:

<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>com.example</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0.0</version>
    
    <dependencies>
        <!-- Define your dependencies here -->
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.example.MainClass</mainClass> <!-- 指定主类 -->
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

在上面的示例中,maven-jar-plugin用于配置Maven如何将项目打包为JAR文件。<mainClass>元素用于指定JAR文件的主类,即程序的入口点。请确保将com.example.MainClass替换为您项目的实际主类。

当您使用IntelliJ IDEA加载这个Maven项目时,IDEA会识别pom.xml中的配置,并相应地进行构建和打包。您可以按照之前提到的步骤执行构建,Maven将根据pom.xml中的配置生成JAR文件。

  1. 在IDEA的右侧边栏中找到"Maven Projects"视图,展开您的项目并找到Lifecycle选项。

  2. Lifecycle选项下,找到package目标,双击运行它,或者右键单击它并选择"Run Maven Build"。

  3. Maven将执行package目标,将您的项目打包为JAR文件。

  4. 打包完成后,您可以在项目的target目录中找到生成的JAR文件。

这样就完成了使用IntelliJ IDEA将Maven项目打包为JAR文件的过程。

如何提示缺少库包,比如package gnu.io does not exist

缺少的是Maven依赖库

如果您的Maven项目中提示 package gnu.io does not exist,这通常表示您的项目依赖于 RXTX 库,它提供了对串行端口的访问。这个库通常用于与串行端口设备进行通信,例如 Arduino、传感器等。

要解决这个问题,您需要在pom.xml文件中添加 RXTX 依赖项,并且确保 Maven 可以找到该依赖项。您可以按照以下步骤进行操作:

  1. pom.xml 文件中添加 RXTX 依赖项。在 <dependencies> 元素中添加以下内容:
<dependency>
    <groupId>org.rxtx</groupId>
    <artifactId>rxtx</artifactId>
    <version>2.2</version> <!-- 或者适合您项目的版本 -->
</dependency>
  1. 确保 Maven 能够访问 RXTX 库。如果您的项目无法访问 RXTX 库,您可以手动下载 RXTX JAR 文件并将其安装到 Maven 本地仓库。您可以从 Maven 中央仓库或 RXTX 官方网站下载 RXTX JAR 文件。

  2. 确保您的项目正确地导入了 RXTX 类。在您的代码中,您需要导入 gnu.io 包下的类,例如:

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
  1. 构建项目并生成 JAR 文件。在 IntelliJ IDEA 中,您可以通过 Maven 执行构建命令来构建项目并生成 JAR 文件。确保构建过程中没有任何关于 RXTX 类缺失的错误。

通过执行以上步骤,您应该能够解决 package gnu.io does not exist 的问题,并成功打包您的项目为 JAR 文件。

缺少的是lib本地库

如果您的项目使用的库是本地导入的 lib,而不是通过 Maven 依赖管理,您需要确保在您的 Maven 构建中包含这些本地库。您可以通过配置 Maven 插件来包含这些本地库。

以下是一种常见的方法,可以在 Maven 打包过程中包含本地库:

  1. 创建一个本地库目录(例如 lib 目录),并将您的本地库(例如 rxtx.jar)复制到该目录中。

  2. pom.xml 文件中,使用 Maven 插件配置 maven-dependency-plugin 来将本地库添加到您的项目中。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <includeScope>runtime</includeScope>
                        <includeArtifactIds>rxtx</includeArtifactIds> <!-- 替换成您的本地库的名称 -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在上面的配置中,maven-dependency-plugin 的目标 copy-dependencies 在 Maven 打包过程中将指定的依赖项(例如 rxtx.jar)从本地库目录复制到项目的目标构建目录中的 lib 目录中。

  1. 确保您的项目中的代码正确导入本地库的类,并且在您的代码中使用这些类。

  2. 执行 Maven 打包命令。在 IntelliJ IDEA 中,您可以使用 Maven Projects 视图中的 package 生命周期目标来执行打包。

通过这样设置,您的 Maven 构建过程应该会在 JAR 文件中包含您的本地库,并且您的项目应该能够正常运行。

关闭Maven打包前SpringBootTest测试功能

为什么我点package,idea却执行了 @SpringBootTest
class HsmApplicationTests {

    @Test
    void contextLoads() {
    }

}

当你在 IntelliJ IDEA 中点击 “package” 时,IDEA 实际上执行了 Maven 的 package 生命周期阶段。在 Maven 的构建生命周期中,package 阶段之前会自动执行 test 阶段。这意味着在打包之前,Maven 会先运行项目中的所有测试用例,以确保代码的质量。这包括所有标记有 @Test 注解的测试方法。

你遇到的情况是,当你尝试打包你的 Spring Boot 应用时,IDEA 自动执行了 HsmApplicationTests 类中的 contextLoads() 测试方法。这个方法使用了 @SpringBootTest 注解,意味着它是一个 Spring Boot 集成测试,用于测试 Spring 应用程序上下文的加载。

如果你不希望在打包时运行测试,你可以通过以下几种方式跳过测试执行:

  1. 使用 Maven 命令跳过测试

在 IDEA 的 Maven Projects 工具窗口中,你可以编辑 package 命令的配置,添加 -DskipTests 参数来跳过测试。命令如下:

mvn package -DskipTests

这会编译和打包你的应用,但跳过测试阶段。
2. 修改 IDEA 配置

如果你是通过 IDEA 的 GUI 按钮执行的打包操作,你可以修改运行配置来跳过测试:

  • 打开 Run/Debug Configurations 对话框。
  • 找到 Maven 的配置。
  • 在 “Command line” 输入框中,添加 -DskipTests 参数。
  • 应用更改并关闭对话框。

这样,当你下次使用这个配置打包时,测试就会被跳过。
3. 修改 pom.xml 文件

虽然不推荐,但你也可以修改 pom.xml 文件,配置 Maven Surefire 插件永久跳过测试:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>版本号</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

请注意,跳过测试可能会隐藏潜在的问题,因此建议只在确实需要时才这样做。
在这里插入图片描述

编译成功

java -jar D:\010F200\svn\F200KIF_FT\hsm\hsm\target\hsm-0.0.1-SNAPSHOT.jar
在这里插入图片描述
用纯java项目方式无法使用。Maven项目只能用Maven插件打包jar。
在这里插入图片描述

以下跟打包没关系

发现log4j-api和slf4j-api之间的冲突

统一日志门面和实现

Maven Spring Boot默认使用Logback作为日志框架,把它修改为org.apache.log4j

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

在这里插入图片描述

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值