Чистая установка Maven без учета зависимости sqlite для исполняемого файла JAR - PullRequest
0 голосов
/ 07 февраля 2019

После использования

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 работает без проблем.Я включил его туда из структуры проекта.

Я заменил имена и каталоги на ****.Это школьный проект, и я не хочу, чтобы мой профессор обвинял меня в предоставлении решений другим группам в случае, если они найдут эту запись в стеке.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Немного предыстории.
Установка Maven никогда не устанавливает зависимости;он только устанавливает проект, который собран через POM.Установка зависимостей - это задача, которую вы также должны выполнить, если вы не используете «толстую флягу» (которую я не рекомендую) или не используете новую реализацию jar для весенней загрузки.

Классическая«толстая банка» - это удивительно ужасное (но часто единственное решение) решение такой проблемы.

Рассмотрите возможность использования Spring-Boot;они разработали новую нормальную версию исполняемого файла JAR, которая включает в себя зависимости внутри исполняемого файла JAR и добавляет их в путь к классам при запуске.Эта функциональность аналогична функциональности файла «войны» при добавлении его в контейнер JEE.

Предупреждение: я не работаю с Pivotal, мне просто нравится большая часть их работы (Spring Framework).

Редактировать: Вот ссылка на раздел Исполняемый файл Jar в справочнике по загрузке Spring .Содержит некоторые детали.

0 голосов
/ 07 февраля 2019

Вероятно, вы получаете это, только когда запускаете свой 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, вы можете следовать этому разделу документации , относящейся к Исполняемым банкам

...