Maven - ошибка не может найти или загрузить основной класс

Я попытался создать этот пример: https://github.com/oltzen/JavaCppExample с Maven (mvn чистая установка) в Linux. После успешной сборки, когда я запускаю: java de.oltzen.javacppexample.Abc: он говорит: «Не удалось загрузить или найти основной класс»

Видеоруководство (https://www.youtube.com/watch?v=LZrrqZLhtmw) использует Eclipse и запускает программу с помощью Run as .. Приложение Java

В файле POM чего-то не хватает?

Я попытался добавить этот плагин в POM, но это не сработало:

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>de.oltzen.javacppexample.Abc</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

Я выполняю из JavaCppExample/target/classes/: -

Папка /classes содержит папки пакетов: de/oltzen/javacppexample/ Последняя папка содержит файл класса Abc.class.

Итак, я запускаю команду:
java de.oltzen.javacppexample.Abc

Папка /target содержит: 1) классы [папка, содержащая пакет] 2) JavaCppExample.jar 3) maven-archiver 4) maven-status

Пожалуйста помоги


person Nitin    schedule 13.05.2020    source источник
comment
Попробуйте очистить проект пару раз в eclipse или перезапустите eclipse, а затем повторите попытку.   -  person Smile    schedule 13.05.2020
comment
Вы хотите создать Uber JAR?   -  person Samuel Audet    schedule 13.05.2020
comment
@SamuelAudet Нет, просто создайте и выполните его. будь то просто с основным классом или с файлом Jar   -  person Nitin    schedule 13.05.2020
comment
@Smile Я создаю проект с помощью командной строки.   -  person Nitin    schedule 13.05.2020
comment
Пожалуйста, обновите вопрос, указав папку, в которой вы запускаете java de.oltzen.javacppexample.Abc, и какие все файлы присутствуют в этой папке.   -  person Smile    schedule 13.05.2020
comment
@Smile Я обновил пост. Пожалуйста, проверьте.   -  person Nitin    schedule 13.05.2020
comment
Если вы можете создать файл jar без каких-либо ошибок, вы используете java -jar /relative_path/fileName.jar   -  person YogendraR    schedule 13.05.2020
comment
@YogendraR Я пробовал, но та же проблема. Я выполнил из папки /target/classes/   -  person Nitin    schedule 13.05.2020
comment
jar-файл не должен находиться в папке классов   -  person YogendraR    schedule 13.05.2020
comment
@YogendraR Нет. Это не так. Он находится в папке /target   -  person Nitin    schedule 13.05.2020
comment
поэтому запустите эту команду из целевой папки   -  person YogendraR    schedule 13.05.2020
comment
@ЙогендраР. Я запустил его из целевой папки. java -jar ‹JAR› . Он говорит, что нет основного атрибута манифеста в JavaCppExample.jar   -  person Nitin    schedule 13.05.2020
comment
откройте файл jar и посмотрите, есть ли файл manifest.mf, этот файл должен содержать атрибут основного класса, тогда только он будет работать   -  person YogendraR    schedule 13.05.2020
comment
@YogendraR нет файла манифеста. Однако я попытался указать это в файле POM, но затем он сказал: Исключение в потоке main java.lang.NoClassDefFoundError: org/bytedeco/javacpp/Pointer. Мой класс расширяет этот сторонний класс JavaCPP - Pointer   -  person Nitin    schedule 13.05.2020
comment
Я не знал, что вы также используете сторонние библиотеки. Чтобы сделать его пригодным для использования, сделайте его толстым/сверхтонким. вы можете использовать maven-assembly-plugin, просмотреть документы maven   -  person YogendraR    schedule 13.05.2020
comment
Добавьте зависимость к pom, которая имеет класс org/bytedeco/javacpp/Pointer   -  person Smile    schedule 13.05.2020
comment
@Smile уже добавлено. см. POM в ссылке github   -  person Nitin    schedule 13.05.2020


Ответы (2)


Я добавил следующие плагины для зависимостей копирования maven и выполнил java -jar javaCppExample.jar [из папки /target], и это сработало. Спасибо всем !

[Просто соберите с помощью чистой установки mvn]

<plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <target>1.8</target>
                    <source>1.8</source>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib/</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>


            <plugin>
                <!--  Build an executable JAR -->
                <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>de.oltzen.javacppexample.Abc</mainClass>
                        </manifest>
                    </archive>

                </configuration>
            </plugin>
person Nitin    schedule 13.05.2020

Если вы хотите запустить свою программу только через maven, используйте exec-maven-plugin.

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
              <execution>
                <goals>
                  <goal>java</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <mainClass>de.oltzen.javacppexample.Abc</mainClass>
            </configuration>
          </plugin>

Узнайте больше здесь => https://www.mojohaus.org/exec-maven-plugin/index.html

Если вы хотите собрать и запустить как jar, используйте плагин сборки

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
              <appendAssemblyId>true</appendAssemblyId>
              <descriptors>
                <descriptor>${project.basedir}/assembly/assembly.xml</descriptor>
              </descriptors>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
              <archive>
                <manifest>
                  <mainClass>de.oltzen.javacppexample.Abc</mainClass>
                </manifest>
              </archive>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <phase>install</phase>
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
          </plugin>

Узнайте больше о плагине сборки Maven, чтобы настроить его под свои нужды.

person Motivated Mind    schedule 13.05.2020
comment
Здесь сработало первое решение Adonis: stackoverflow.com/questions/42470641/ - person Nitin; 13.05.2020