0

I have created a simple application that has the task of retrieving the command results (RAM usage in percent) and saving them to a txt file at various intervals. Unfortunately I am getting the following error:

ubuntu@ip-172-31-31-49:~$ java -cp ~/RAMDataGenerator/target/RAMDataGenerator-1.0.0-SNAPSHOT-jar-with-dependencies.jar data.App
Error: Could not find or load main class data.App
Caused by: java.lang.ClassNotFoundException: data.App

I checked also to be sure that the main class is in the jar file.

ubuntu@ip-172-31-31-49:~/RAMDataGenerator/target$ jar tf RAMGenerator-0.0.1-SNAPSHOT-jar-with-dependencies.jar
META-INF/
META-INF/MANIFEST.MF
LICENSE
META-INF/maven/
META-INF/maven/args4j/
META-INF/maven/args4j/args4j/
META-INF/maven/args4j/args4j/pom.properties
META-INF/maven/args4j/args4j/pom.xml
OSGI-OPT/
OSGI-OPT/src/
OSGI-OPT/src/org/
OSGI-OPT/src/org/kohsuke/
OSGI-OPT/src/org/kohsuke/args4j/
OSGI-OPT/src/org/kohsuke/args4j/Argument.java
OSGI-OPT/src/org/kohsuke/args4j/ClassParser.java
OSGI-OPT/src/org/kohsuke/args4j/CmdLineException.java
OSGI-OPT/src/org/kohsuke/args4j/CmdLineParser.java
OSGI-OPT/src/org/kohsuke/args4j/Config.java
OSGI-OPT/src/org/kohsuke/args4j/ExampleMode.java
OSGI-OPT/src/org/kohsuke/args4j/FieldParser.java
OSGI-OPT/src/org/kohsuke/args4j/IllegalAnnotationError.java
OSGI-OPT/src/org/kohsuke/args4j/Localizable.java
OSGI-OPT/src/org/kohsuke/args4j/Messages.java
OSGI-OPT/src/org/kohsuke/args4j/NamedOptionDef.java
OSGI-OPT/src/org/kohsuke/args4j/Option.java
OSGI-OPT/src/org/kohsuke/args4j/OptionDef.java
OSGI-OPT/src/org/kohsuke/args4j/OptionHandlerFilter.java
OSGI-OPT/src/org/kohsuke/args4j/OptionHandlerRegistry.java
OSGI-OPT/src/org/kohsuke/args4j/ParserProperties.java
OSGI-OPT/src/org/kohsuke/args4j/Starter.java
OSGI-OPT/src/org/kohsuke/args4j/Utilities.java
OSGI-OPT/src/org/kohsuke/args4j/XmlParser.java
OSGI-OPT/src/org/kohsuke/args4j/package.html
OSGI-OPT/src/org/kohsuke/args4j/spi/
OSGI-OPT/src/org/kohsuke/args4j/spi/AnnotationImpl.java
OSGI-OPT/src/org/kohsuke/args4j/spi/ArgumentImpl.java
OSGI-OPT/src/org/kohsuke/args4j/spi/ArrayFieldSetter.java
OSGI-OPT/src/org/kohsuke/args4j/spi/BooleanOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/ByteOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/CharOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/ConfigElement.java
OSGI-OPT/src/org/kohsuke/args4j/spi/DelimitedOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/DoubleOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/EnumOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/ExplicitBooleanOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/FieldSetter.java
OSGI-OPT/src/org/kohsuke/args4j/spi/FileOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/FloatOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/Getter.java
OSGI-OPT/src/org/kohsuke/args4j/spi/InetAddressOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/IntOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/LongOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/MacAddressOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/MapOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/Messages.java
OSGI-OPT/src/org/kohsuke/args4j/spi/MethodSetter.java
OSGI-OPT/src/org/kohsuke/args4j/spi/MultiFileOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/MultiPathOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/MultiValueFieldSetter.java
OSGI-OPT/src/org/kohsuke/args4j/spi/OneArgumentOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/OptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/OptionImpl.java
OSGI-OPT/src/org/kohsuke/args4j/spi/Parameters.java
OSGI-OPT/src/org/kohsuke/args4j/spi/PathOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/PatternOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/RestOfArgumentsHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/Setter.java
OSGI-OPT/src/org/kohsuke/args4j/spi/Setters.java
OSGI-OPT/src/org/kohsuke/args4j/spi/ShortOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/StopOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/StringArrayOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/StringOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/SubCommand.java
OSGI-OPT/src/org/kohsuke/args4j/spi/SubCommandHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/SubCommands.java
OSGI-OPT/src/org/kohsuke/args4j/spi/URIOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/URLOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/UuidOptionHandler.java
OSGI-OPT/src/org/kohsuke/args4j/spi/package.html
org/
org/kohsuke/
org/kohsuke/args4j/
org/kohsuke/args4j/Argument.class
org/kohsuke/args4j/ClassParser.class
org/kohsuke/args4j/CmdLineException.class
org/kohsuke/args4j/CmdLineParser$CmdLineImpl.class
org/kohsuke/args4j/CmdLineParser.class
org/kohsuke/args4j/Config$ConfigHandler.class
org/kohsuke/args4j/Config.class
org/kohsuke/args4j/ExampleMode$1.class
org/kohsuke/args4j/ExampleMode$2.class
org/kohsuke/args4j/ExampleMode.class
org/kohsuke/args4j/FieldParser.class
org/kohsuke/args4j/IllegalAnnotationError.class
org/kohsuke/args4j/Localizable.class
org/kohsuke/args4j/Messages.class
org/kohsuke/args4j/Messages.properties
org/kohsuke/args4j/Messages_de.properties
org/kohsuke/args4j/Messages_en.properties
org/kohsuke/args4j/Messages_ru.properties
org/kohsuke/args4j/NamedOptionDef.class
org/kohsuke/args4j/Option.class
org/kohsuke/args4j/OptionDef.class
org/kohsuke/args4j/OptionHandlerFilter$1.class
org/kohsuke/args4j/OptionHandlerFilter$2.class
org/kohsuke/args4j/OptionHandlerFilter$3.class
org/kohsuke/args4j/OptionHandlerFilter.class
org/kohsuke/args4j/OptionHandlerRegistry$DefaultConstructorHandlerFactory.class
org/kohsuke/args4j/OptionHandlerRegistry$OptionHandlerFactory.class
org/kohsuke/args4j/OptionHandlerRegistry.class
org/kohsuke/args4j/ParserProperties$1.class
org/kohsuke/args4j/ParserProperties.class
org/kohsuke/args4j/Starter.class
org/kohsuke/args4j/Utilities.class
org/kohsuke/args4j/XmlParser.class
org/kohsuke/args4j/spi/
org/kohsuke/args4j/spi/AnnotationImpl.class
org/kohsuke/args4j/spi/ArgumentImpl.class
org/kohsuke/args4j/spi/ArrayFieldSetter.class
org/kohsuke/args4j/spi/BooleanOptionHandler.class
org/kohsuke/args4j/spi/ByteOptionHandler.class
org/kohsuke/args4j/spi/CharOptionHandler.class
org/kohsuke/args4j/spi/ConfigElement.class
org/kohsuke/args4j/spi/DelimitedOptionHandler.class
org/kohsuke/args4j/spi/DoubleOptionHandler.class
org/kohsuke/args4j/spi/EnumOptionHandler.class
org/kohsuke/args4j/spi/ExplicitBooleanOptionHandler.class
org/kohsuke/args4j/spi/FieldSetter.class
org/kohsuke/args4j/spi/FileOptionHandler.class
org/kohsuke/args4j/spi/FloatOptionHandler.class
org/kohsuke/args4j/spi/Getter.class
org/kohsuke/args4j/spi/InetAddressOptionHandler.class
org/kohsuke/args4j/spi/IntOptionHandler.class
org/kohsuke/args4j/spi/LongOptionHandler.class
org/kohsuke/args4j/spi/MacAddressOptionHandler.class
org/kohsuke/args4j/spi/MapOptionHandler.class
org/kohsuke/args4j/spi/Messages.class
org/kohsuke/args4j/spi/Messages.properties
org/kohsuke/args4j/spi/Messages_de.properties
org/kohsuke/args4j/spi/Messages_en.properties
org/kohsuke/args4j/spi/Messages_ru.properties
org/kohsuke/args4j/spi/MethodSetter.class
org/kohsuke/args4j/spi/MultiFileOptionHandler.class
org/kohsuke/args4j/spi/MultiPathOptionHandler.class
org/kohsuke/args4j/spi/MultiValueFieldSetter.class
org/kohsuke/args4j/spi/OneArgumentOptionHandler.class
org/kohsuke/args4j/spi/OptionHandler.class
org/kohsuke/args4j/spi/OptionImpl.class
org/kohsuke/args4j/spi/Parameters.class
org/kohsuke/args4j/spi/PathOptionHandler.class
org/kohsuke/args4j/spi/PatternOptionHandler.class
org/kohsuke/args4j/spi/RestOfArgumentsHandler.class
org/kohsuke/args4j/spi/Setter.class
org/kohsuke/args4j/spi/Setters.class
org/kohsuke/args4j/spi/ShortOptionHandler.class
org/kohsuke/args4j/spi/StopOptionHandler.class
org/kohsuke/args4j/spi/StringArrayOptionHandler.class
org/kohsuke/args4j/spi/StringOptionHandler.class
org/kohsuke/args4j/spi/SubCommand.class
org/kohsuke/args4j/spi/SubCommandHandler$1.class
org/kohsuke/args4j/spi/SubCommandHandler.class
org/kohsuke/args4j/spi/SubCommands.class
org/kohsuke/args4j/spi/URIOptionHandler.class
org/kohsuke/args4j/spi/URLOptionHandler.class
org/kohsuke/args4j/spi/UuidOptionHandler.class
data/
data/pojo/
data/generator/
data/runner/
data/pojo/DataPOJO.class
data/generator/TimeGenerator.class
data/generator/DataGenerator.class
data/runner/SaveToFile.class
data/runner/SaveFileRunner.class
data/App.class

This is the first time something like this has happened to me. I have created a similar application that downloads CPU usage data and it works, the only difference is the command to be executed.

This is what my pom.xml file looks like:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.project</groupId>
  <artifactId>RAMGenerator</artifactId>
  <version>0.0.1-SNAPSHOT</version>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>

            </plugin>
            <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                                <mainClass>data.App</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
        </plugins>
    </build>

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


    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/args4j/args4j -->
        <dependency>
            <groupId>args4j</groupId>
            <artifactId>args4j</artifactId>
            <version>2.33</version>
        </dependency>



    </dependencies>
</project>

Anyone have any idea what might be causing this error?

Edit 1 (Corrected):

Answers in this question not works for me: What does "Could not find or load main class" mean?

I have created an identical jar that differs only in the type of data saved, and that works. If the problem was related to one of the answers to this question, both jar files would show the same error at startup, not just one.

Edit 2 (reply to comment by Joachim Sauer):

Without specifying the main class:

ubuntu@ip-172-31-29-175:~/RAMDataGenerator/target$ java -jar ~/RAMDataGenerator/target/RAMDataGenerator-1.0.0-SNAPSHOT-jar-with-dependencies.jar
Error: Unable to access jarfile /home/ubuntu/RAMDataGenerator/target/RAMDataGenerator-1.0.0-SNAPSHOT-jar-with-dependencies.jar

With specifying the main class:

ubuntu@ip-172-31-29-175:~/RAMDataGenerator/target$ java -jar -cp ~/RAMDataGenerator/target/RAMDataGenerator-1.0.0-SNAPSHOT-jar-with-dependencies.jar data.App
Error: Unable to access jarfile data.App
Joachim Sauer
  • 302,674
  • 57
  • 556
  • 614
PiotrKulesza
  • 135
  • 1
  • 2
  • 8
  • 1
    Does this answer your question? [What does "Could not find or load main class" mean?](https://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-mean) – vaibhavsahu Aug 30 '21 at 15:28
  • That's weird. Is there any more output on the `java` command? Like a stack trace or the like? Also does `java -jar` work any better? The only reason I could think of is that the main class can't be loaded due to some missing dependency or error in the initializer, but that should show in the error message. – Joachim Sauer Aug 30 '21 at 15:36
  • The command returns the following error: ``Error: Unable to access jarfile /home/ubuntu/RAMDataGenerator/target/RAMDataGenerator-1.0.0-SNAPSHOT-jar-with-dependencies.jar`` – PiotrKulesza Aug 30 '21 at 15:54
  • 2
    You are mixing `0.0.1` and `1.0.0` in your question. Is this just a case of a typo? I had assumed that the command line was produced with auto-completion, but if the jar file name is wrong, then it won't work ... – Joachim Sauer Aug 30 '21 at 15:57
  • You also can't combine `-cp` and `-jar`, the two switches are mutually exclusive. `-jar` implies that the jar file and any libraries it references are the only thing on the classpath. – Joachim Sauer Aug 30 '21 at 16:01
  • 3
    Again: your `java` command uses `1.0.0-SNAPSHOT` and your `jar` command uses `0.0.1-SNAPSHOT`! You're using the wrong file name! – Joachim Sauer Aug 30 '21 at 16:02
  • Yes, The problem was a typo. I always forget to check if I made a typo somewhere. In fact, it's quite strange that java does not indicate that the jar file does not exist. – PiotrKulesza Aug 30 '21 at 16:06
  • @PiotrKulesza: it does indicated it in the `-jar` case but doesn't when used on `-cp`. For some reason inexistent resource on the classpath are silently ignored. I'm sure there is *some* reason for that, but I agree that it probably causes more problems than it solves. – Joachim Sauer Aug 30 '21 at 16:38

0 Answers0