David Klempfner
David Klempfner

Reputation: 9930

NoClassDefFoundError: Could not initialize class in JMeter

I tried copying a bunch of custom plugins into my C:\apache-jmeter-5.3\lib\ext folder.

But when I try to open C:\Projects\centaurjmeter\src\test\unittests\mytree\loadtest.mytree.jmx, I get this error:

Problem loading XML from:'C:\Projects\centaurjmeter\src\test\unittests\mytree\unittest.mytree.common.jmx'. 
Cause:
NoClassDefFoundError: Could not initialize class au.com.mycompany.jmeter.reporters.TimingListener

 Detail:com.thoughtworks.xstream.converters.ConversionException: 
---- Debugging information ----
cause-exception     : java.lang.NoClassDefFoundError
cause-message       : Could not initialize class au.com.mycompany.jmeter.reporters.TimingListener
first-jmeter-class  : org.apache.jmeter.save.converters.TestElementConverter.unmarshal(TestElementConverter.java:98)
class               : org.apache.jmeter.save.ScriptWrapper
required-type       : org.apache.jmeter.save.ScriptWrapper
converter-type      : org.apache.jmeter.save.ScriptWrapperConverter
path                : /jmeterTestPlan/hashTree/hashTree/au.com.mycompany.jmeter.reporters.TimingListener
line number         : 197
version             : 5.3
-------------------------------

I'm using JMeter 5.3.

This is the content of my C:\Projects\centaurjmeter\pom.xml file:

<?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>mycompany</groupId>
    <artifactId>centaurjmeter</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- No need to run deploy lifecycle -->
        <maven.deploy.skip>true</maven.deploy.skip>

        <!-- No need to create a JAR -->
        <jar.skipIfEmpty>true</jar.skipIfEmpty>
        <maven.install.skip>true</maven.install.skip>

        <!-- Specify which JMX to run by default -->
        <testname>unittests</testname>
        <!-- Run in perftest env unless overridden using -Denv -->
        <env>perf</env>
    </properties>

    <repositories>
        <repository>
            <id>mycompany</id>
            <url>https://mycompanyproject.pkgs.visualstudio.com/_packaging/mycompany/maven/v1</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>mycompanyproject-visualstudio.com-maven</id>
            <!-- <id>mycompany</id> -->
            <url>https://mycompanyproject.pkgs.visualstudio.com/_packaging/maven/maven/v1</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- Dependencies are used for regression load tests. -->
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>4.1</version>
        </dependency>

        <!-- Required for AMQP JMS messaging -->
        <!-- https://mvnrepository.com/artifact/org.apache.qpid/qpid-jms-client -->
        <dependency>
            <groupId>org.apache.qpid</groupId>
            <artifactId>qpid-jms-client</artifactId>
            <version>0.38.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-jms_2.0_spec -->
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jms_2.0_spec</artifactId>
            <version>1.0-alpha-2</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.qpid/proton-j -->
        <dependency>
            <groupId>org.apache.qpid</groupId>
            <artifactId>proton-j</artifactId>
            <version>0.30.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-codec -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-codec</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-codec-http -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-codec-http</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport-native-epoll</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-transport-native-kqueue -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport-native-kqueue</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-transport -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-resolver -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-resolver</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-handler -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-handler</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-common -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-common</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-buffer -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-buffer</artifactId>
            <version>4.1.31.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.blazemeter/jmeter-plugins-wsc -->
        <dependency>
            <groupId>com.blazemeter</groupId>
            <artifactId>jmeter-plugins-wsc</artifactId>
            <version>0.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/kg.apc/jmeter-plugins-cmn-jmeter -->
        <dependency>
            <groupId>kg.apc</groupId>
            <artifactId>jmeter-plugins-cmn-jmeter</artifactId>
            <version>0.6</version>
        </dependency>

        <!-- Required for Invoice Genius -->
        <dependency>
            <groupId>au.com.mycompany</groupId>
            <artifactId>perfsignalr</artifactId>
            <version>0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>microsoft.aspnet.signalr</groupId>
            <artifactId>signalr-client-sdk</artifactId>
            <version>1.0</version>
        </dependency>

        <!-- Dependency for signalr-client-sdk and timinglistener -->
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>

        <!-- Dependency for websocket samplers for SignalR in mytree (https://github.com/ptrd/jmeter-websocket-samplers) -->
        <!-- https://mvnrepository.com/artifact/net.luminis.jmeter/jmeter-websocket-samplers -->
        <dependency>
            <groupId>net.luminis.jmeter</groupId>
            <artifactId>jmeter-websocket-samplers</artifactId>
            <version>1.2.1</version>
        </dependency>

        <!-- Record timing and transaction data in JSON format -->
        <dependency>
            <groupId>au.com.mycompany</groupId>
            <artifactId>timinglistener</artifactId>
            <version>0.2-SNAPSHOT</version>
        </dependency>

        <!-- Log directly to Sumologic HTTP endpoint -->
        <!-- https://mvnrepository.com/artifact/com.sumologic.plugins.log4j/sumologic-log4j2-appender -->
        <dependency>
            <groupId>com.sumologic.plugins.log4j</groupId>
            <artifactId>sumologic-log4j2-appender</artifactId>
            <version>1.7</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/com.sumologic.plugins.http/sumologic-http-core -->
        <dependency>
            <groupId>com.sumologic.plugins.http</groupId>
            <artifactId>sumologic-http-core</artifactId>
            <version>1.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <excludes>
                    <!-- Exclude PDF and GIFTS files in the unittests -->
                    <exclude>data/*/gifts/**/*.gifts</exclude>
                    <exclude>data/*/qif/**/*.qif</exclude>
                    <exclude>data/*/invoices/**/*.pdf</exclude>
                    <exclude>data/*/invoices/**/*.png</exclude>
                </excludes>
            </testResource>
        </testResources>
    </build>
</project>

This is the content of C:\Projects\mycompany-jmeter-plugins\timinglistener\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">
    <parent>
        <artifactId>mycompany-jmeter-plugins</artifactId>
        <groupId>au.com.mycompany</groupId>
        <version>0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>timinglistener</artifactId>
    <version>0.2-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.10.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.10.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core -->
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>4.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_components</artifactId>
            <version>4.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
    </dependencies>
</project>

Upvotes: 0

Views: 1910

Answers (1)

Dmitri T
Dmitri T

Reputation: 168157

The error you're getting indicates that the jar containing au.com.mycompany.jmeter.reporters.TimingListener class is not present under JMeter Classpath so make sure it's there

  1. Plugins themselves should go to "lib/ext" folder
  2. Plugins dependencies should go to "lib" folder (unless they're "fat jars")
  3. JMeter restart is needed to pick up the libraries
  4. If you run JMeter via maven you need to specify the dependencies a little bit differently
  5. If you're using JMeter 5.3 for test execution you should ramp-up ApacheJMeter_core and ApacheJMeter_components to version 5.3 as well.

Upvotes: 1

Related Questions