java.lang.NoClassDefFoundError: Не удалось связать org / pentaho / di / core / attribute / metastore / EmbeddedMetaStore - PullRequest
0 голосов
/ 25 января 2019

Я создаю пакет с Pentaho Kettle для обработки некоторых файлов. Эта партия запускается сервлетом. Однако, когда я пытаюсь запустить его, я получаю следующее предупреждение, которое фактически блокирует процесс:

WARN  [org.jboss.modules] (Batch Thread - 2) Failed to define class org.pentaho.di.core.attributes.metastore.EmbeddedMetaStore in Module "deployment.my-program-1.0.0.0-SNAPSHOT.war:main" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link org/pentaho/di/core/attributes/metastore/EmbeddedMetaStore (Module "deployment.my-program-1.0.0.0-SNAPSHOT.war:main" from Service Module Loader): org/pentaho/metastore/api/BaseMetaStore
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:78)
at org.jboss.modules.Module.loadModuleClass(Module.java:605)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
at org.pentaho.di.base.AbstractMeta.<init>(AbstractMeta.java:162)
at org.pentaho.di.job.JobMeta.<init>(JobMeta.java:201)
at org.pentaho.di.job.JobMeta.<init>(JobMeta.java:755)

Однако, когда я заглядываю в свою папку lib, там находится банка, содержащая этот класс ( kettle-engine-8.2.0.0-342.jar ), и этот класс тоже в нем.

Я использую JBoss EAP 7.0 с Java 1.8.0.161 на моем компьютере для разработки. Я начинаю это с моей IDE (Eclipse Photon). Вот мои зависимости в pom.xml:

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <!-- vf2 debug -->
    <dependency>
         <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2</artifactId>
        <version>2.2</version>
    </dependency>

    <!-- maven-war-plugin-->
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
    </dependency>

    <!-- pentaho kettle -->
    <dependency>
        <groupId>pentaho-kettle</groupId>
        <artifactId>kettle-core</artifactId>
        <version>8.2.0.0-342</version>
    </dependency>
    <dependency>
        <groupId>pentaho-kettle</groupId>
        <artifactId>kettle-engine</artifactId>
        <version>8.2.0.0-342</version>
    </dependency>

    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>2.5.16</version>
    </dependency>       
    <dependency>
        <groupId>org.mozilla</groupId>
        <artifactId>rhino</artifactId>
        <version>1.7R3</version>
    </dependency>
    <!-- this correct an error -->
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

    <!-- netty version override to correct netty 3.7 bug / FYI, pentaho don't use netty anyway-->
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty</artifactId>
        <version>3.9.0.Final</version>
    </dependency>
</dependencies>

Важное замечание: эта проблема не возникает при использовании предыдущей версии с чайником и двигателем (протестировано с 7.0). Это встроенный вызов, поэтому я не вызываю этот класс напрямую в своем коде.

У меня нет нескольких версий этого фляги в моем classpath.

1 Ответ

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

Другой человек в моей компании узнал об этом, поэтому я просто отвечу здесь, чтобы закрыть тему.Я не показывал это здесь, но в моих зависимостях у меня была зависимость от какой-то пользовательской инфраструктуры с работы.Этот фреймворк фактически включал Pentaho, но версию 7.0.Тогда @suresh был прав, когда говорил о множественной версии jar.

Итак, ответ таков:

Проверьте, содержит ли какая-либо зависимость дублирующуюся зависимость, которую вы вызываете где-тоостальное.Чтобы избежать этой проблемы, используйте исключающий синтаксис в зависимости, вызывающий неправильные версии:

        <exclusions>
            <exclusion>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle-engine</artifactId>
            </exclusion>
            <exclusion>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle-core</artifactId>
            </exclusion>
        </exclusions>
...