Java/Maven – не удалось найти или загрузить основной класс

Я просмотрел другие вопросы stackoverflow, касающиеся этой проблемы, и эти вопросы и ответы относятся к неправильной настройке основного класса в pom.xml. Я написал основной класс, чтобы иметь правильное имя пакета и правильную чувствительность к регистру, но всякий раз, когда я запускаю свою банку, я получаю сообщение об ошибке Could not find or load main class.

Я добавил проект в github: https://github.com/quicksilversly/maze и мой плагин maven jar конфигурация выглядит так:

configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.willisjtc.maze.VertxStarter</mainClass>
        </manifest>
    </archive>
</configuration>

И вот мой основной класс:

package com.willisjtc.maze;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger;

public class VertxStarter extends AbstractVerticle {

    private static final Logger logger = LogManager.getLogger(VertxStarter.class);

    public static void main(String... args) {
        Vertx vertx = Vertx.vertx();
        vertx.deployVerticle("ruby/webVerticle.rb");
        vertx.deployVerticle("ruby/mazeVerticle.rb");
    }
}

Вот что я получаю, когда запускаю java tvf target/jar-to-run.jar:

 597 Sat Aug 06 21:59:54 MDT 2016 META-INF/MANIFEST.MF
   0 Sat Aug 06 21:59:54 MDT 2016 META-INF/
   0 Sat Aug 06 21:43:12 MDT 2016 com/
   0 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/
   0 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/maze/
   0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/
   0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/com.willisjtc/
   0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/com.willisjtc/maze/
   0 Sat Aug 06 21:43:10 MDT 2016 ruby/
 907 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/maze/VertxStarter.class
 220 Sat Aug 06 21:56:14 MDT 2016 META-INF/maven/com.willisjtc/maze/pom.properties
2105 Sat Aug 06 21:56:14 MDT 2016 META-INF/maven/com.willisjtc/maze/pom.xml
 137 Sat Aug 06 21:43:10 MDT 2016 ruby/mazeVerticle.rb
 221 Sat Aug 06 21:43:10 MDT 2016 ruby/webVerticle.rb

Итак, мой основной класс там, как и ожидалось.

Что мне нужно изменить, чтобы запустить файл jar?


person j will    schedule 07.08.2016    source источник
comment
Возможный дубликат Как я могу создать исполняемый файл JAR с зависимостями, использующими Maven?   -  person Aaron Davis    schedule 07.08.2016
comment
Пожалуйста, рассмотрите возможность принятия ответа или предоставления комментариев, чтобы мы могли помочь вам с этой проблемой.   -  person jlars62    schedule 08.09.2016


Ответы (2)


Это отлично сработало для меня.

Добавьте эти плагины в свой pom.xml:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                             </excludes>
                         </filter>
                     </filters>
                     <transformers>
                         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

                             <!--enter the name of your class here-->
                             <mainClass>YourPackage.YourMainClass</mainClass>
                         </transformer>
                     </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

Обязательно замените элемент mainClass на правильное имя пакета и класса.

Затем запустите mvn package, чтобы создать исполняемый файл jar.

Баночка будет построена внутри каталога /target.

Затем вы можете запустить банку из командной строки с помощью этой команды:

java -jar <NameOfJarFile>.jar

person jlars62    schedule 08.08.2016

Когда вы запускаете java -jar output-jar-file.jar, ваш main() не может найти внешние пакеты, такие как io.vertx.core.AbstractVerticle, io.vertx.core.Vertx, поэтому не может быть загружен.

Используя <addClasspath>true</addClasspath>, java будет ожидать, что все зависимости будут представлены вместе с вашей исполняемой банкой в ​​одном и том же каталоге. На самом деле все ваши зависимости находятся внутри .m2 каталога.

Вам нужно скопировать все зависимости в каталог target и объявить его как путь к классам для вашего файла output-jar. Измените свой pom.xml следующим образом:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.willisjtc.maze.VertxStarter</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
person Rocherlee    schedule 07.08.2016