Как исправить «NoClassDefFoundError KieServices.Factory» - PullRequest
0 голосов
/ 22 января 2019

Я только начинаю изучать JBoss Drools.Итак, я сделал небольшое заявление из книги, Drools Jboss Rules 5.X.Как я вскоре заметил, инициализация Drools 5.X ограничена, и я переписал код для Drools 6.2+, используя KieServices.Сборка проекта завершена без ошибок. Но, запустив jar, я всегда получал NoClassDefFoundError: org / kie / api / KieServices $ Factory.Затем я начал в самом начале с кода, в котором ничего нет, просто инициализировал KieServices и получил ту же ошибку.Все предложения Stackoverflow и другие обсуждения не помогли.Смотрите ниже код (почти ничего) и maven-файл.У кого-нибудь есть решение?

Основной класс с инициализацией KieServices

import org.kie.api.KieServices;

public class App {
    public static void main(String[] args) {
        System.out.println("start");
        KieServices ks = KieServices.Factory.get();
    }
}

А вот мой Maven-проект

<properties>
    <drools.version>6.3.0.Final</drools.version>
    <java.version>1.8</java.version>
</properties>


<dependencies>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>${drools.version}</version>
    </dependency>


    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>${drools.version}</version>
    </dependency>

    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
        <version>${drools.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.kie.server/kie-server-api -->
    <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-api</artifactId>
        <version>${drools.version}</version>
    </dependency>

</dependencies>

<build>
    <plugins>

        <plugin>
            <groupId>org.kie</groupId>
            <artifactId>kie-maven-plugin</artifactId>
            <version>${drools.version}</version>
            <extensions>true</extensions>
        </plugin>

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

1 Ответ

0 голосов
/ 23 января 2019

Наконец, я добавил плагин Maven Shade для создания баночки Uber. Я гарантирую, что все классы будут там во время выполнения. Оно работает. Может быть, есть лучшее решение, тогда, пожалуйста, оставьте ответ. Проект Maven теперь выглядит так:

<properties>
    <drools.version>6.3.0.Final</drools.version>
    <java.version>1.8</java.version>
</properties>


<dependencies>

    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>${drools.version}</version>
    </dependency>


    <dependency>

Может быть, это поможет некоторым другим.

        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>${drools.version}</version>
    </dependency>

    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
        <version>${drools.version}</version>
    </dependency>

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>

</dependencies>

<build>
    <plugins>

        <plugin>
            <groupId>org.kie</groupId>
            <artifactId>kie-maven-plugin</artifactId>
            <version>${drools.version}</version>
            <extensions>true</extensions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>


        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>App</mainClass>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
...