为了账号安全,请及时绑定邮箱和手机立即绑定

Maven 全新安装不包括可执行 jar 文件的 sqlite 依赖项

Maven 全新安装不包括可执行 jar 文件的 sqlite 依赖项

婷婷同学_ 2022-06-08 16:48:40
使用后mvn clean install接着java -jar executable.jar我收到此错误:java.lang.ClassNotFoundException: org.sqlite.JDBC  这是我的 pom.xml<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>****</groupId><artifactId>****</artifactId><version>0.7-SNAPSHOT</version><packaging>jar</packaging><name>****</name><description>****</description><properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>    <java.version>1.8</java.version>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies>    <dependency>        <groupId>org.xerial</groupId>        <artifactId>sqlite-jdbc</artifactId>        <version>3.23.1</version>    </dependency>    <!-- https://mvnrepository.com/artifact/org.junit/junit5-engine -->    <dependency>        <groupId>org.junit</groupId>        <artifactId>junit5-engine</artifactId>        <version>5.0.0-ALPHA</version>    </dependency>    <!-- https://mvnrepository.com/artifact/org.tinyjee.jgraphx/jgraphx -->    <dependency>        <groupId>org.tinyjee.jgraphx</groupId>        <artifactId>jgraphx</artifactId>        <version>3.4.1.3</version>    </dependency></dependencies><build>    <sourceDirectory>******</sourceDirectory>    <plugins>        <plugin>            <groupId>org.codehaus.mojo</groupId>            <artifactId>exec-maven-plugin</artifactId>            <version>1.2.1</version>            <configuration>                <mainClass>*****</mainClass>            </configuration>        </plugin>        <plugin>在 intelliJ 中运行程序没有问题。我将它从项目结构中包含在内。我用 **** 替换了名称和目录。这是一个学校项目,我不希望我的教授指责我为其他团体提供解决方案,以防他们发现这个 stackoverflow 条目。
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

可能只有在运行 jar 时才会得到这个,因为依赖项在其中不可用/打包。


尝试生成一个“fat jar”(也称为uber-jar),它会将所有依赖项打包到 jar 中:


<build>

    <plugins>

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-shade-plugin</artifactId>

            <executions>

                <execution>

                    <phase>package</phase>

                    <goals>

                        <goal>shade</goal>

                    </goals>

                </execution>

            </executions>

            <configuration>

                <finalName>YOUR_JAR_FINAL_NAME</finalName>

            </configuration>

        </plugin>

    </plugins>

</build>

相关的文档maven-shade-plugin可以在这里找到

由于您使用的是可运行的 jar 文件,因此您可以遵循与Executable Jars相关的文档的这一部分


查看完整回答
反对 回复 2022-06-08
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

一些背景。
Maven install 从不安装依赖项;它只安装通过 POM 构建的项目。如果您不使用“胖 jar”(我不推荐)或使用新的 spring boot 可执行 jar 实现,那么依赖项的安装也是您必须执行的任务。

对于这样的问题,经典的“胖罐子”是一个非常糟糕(但通常是唯一选择)的解决方案。

考虑使用 Spring-Boot;他们开发了一个新的、健全的可执行 jar 文件版本,其中包括可执行 jar 中的依赖项,并在启动时将它们添加到类路径中。此功能类似于将“war”文件添加到 JEE 容器时的功能。

警告:我不为 Pivotal 工作,我只是喜欢他们的大部分工作(Spring 框架)。

编辑:这是 Spring Boot Reference 中 Executable Jar 部分的链接。它包含一些细节。


查看完整回答
反对 回复 2022-06-08
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信