java Maven clean安装不包括可执行jar文件的sqlite依赖项
使用后
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>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>******</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
在intelliJ中运行程序不会出现问题。我从项目结构中包括了它
我用****替换了名字和目录。这是一个学校项目,我不想让我的教授指责我为其他群体提供解决方案,以防他们发现这个项目
# 1 楼答案
可能只有在运行jar时,您才会得到这个消息,因为依赖项不可用/打包在jar中
尝试生成一个“胖罐子”(也称为uber-jar),它会将所有依赖项打包到罐子中:
与
maven-shade-plugin
相关的文档可以是found in here因为您使用的是可运行的jar文件,所以可以遵循与可执行jar相关的this section of the documentation可执行jar
# 2 楼答案
一些背景
Maven install从不安装依赖项; 它只安装通过POM构建的项目。 依赖项的安装也是您必须执行的任务 如果你既不使用“肥罐”(我不推荐),也不使用 新的spring boot可执行jar实现
经典的“胖罐子”是一个令人惊讶的可怕 (但通常是唯一的选择) 这样一个问题的解决方案
< >考虑使用弹簧靴; 他们开发了一种新的, 精神健全的 可执行jar文件的版本,其中包括可执行jar中的依赖项,并在启动时将它们添加到类路径中。 此功能类似于添加到“war”文件时的“war”文件功能 吉普集装箱警告:我不为Pivotal工作, 我只是喜欢他们的大部分工作(Spring框架)
编辑: 这里有一个链接到 Executable Jar Section in the Spring Boot Reference。 它包含一些细节