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

Я только начал изучать Java, но проблемы возникают почти на каждом этапе ... Хотелось бы, чтобы это супер простое руководство по началу работы работал (с официальной страницы Maven) :)

Я сделал каждый шаг, как в этом руководстве, и построил проект, но не могу его запустить.

Итак, после mvn package у меня есть BUILD SUCCESSFUL, но когда я пытаюсь запустить файл jar с помощью этой команды java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App, возникает ошибка:

Error: Could not find or load main class com.mycompany.app.App
Caused by: java.lang.ClassNotFoundException: com.mycompany.app.App

Как это исправить?

версия java "11.0.1" 2018-10-16 LTS

Apache Maven 3.6.0

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Структура проекта создается автоматически этой командой, как показано в документации.

my-app
 |-src
 |  |-main
 |     |-java
 |        |-com
 |           |-mycompany
 |              |-app
 |                 |-App.java
 |-pom.xml
 |-target

И код App.java:

 package com.mycompany.app;

 /**
  * Hello world!
  *
 */
 public class App 
 {
     public static void main( String[] args )
     {
        System.out.println( "Hello World!" );
    }
}

И файл pom.xml:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>maven-test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven-test</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>
</project>

Также мне пришлось добавить эти строки, чтобы заставить работать команду mvn package:

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

Если вы только начинаете изучать Java, начните с самостоятельного изучения Java. добавить maven позже

Stultuske 14.11.2018 10:13

Я предлагаю вам написать свой код и скомпилировать его с помощью команды javac. позже, когда вы улучшите свой образ мышления и знания, вы начнете использовать фреймворки, библиотеки, такие как maven и т. д.

Türkmen Mustafa Demirci 14.11.2018 10:35

@Stultuske, спасибо, но это не решает проблему. Кроме того, я пытаюсь повторить очень простой пример из официальных документов maven.

mr.boris 14.11.2018 10:36

@ mr.boris нет, однако в долгосрочной перспективе это могло бы избежать для вас подобных проблем. это как если бы человек, который только что научился ходить после того, как был парализован всю свою жизнь, сказал: «Я только что пытался пробежать 15 миль, и у меня болит нога». Конечно, вы можете массировать ногу, но если вы не наберетесь и не начнете с самого начала, эта нога будет болеть и в следующий раз.

Stultuske 14.11.2018 10:40

@Stultuske, спасибо за наставничество, но в целом у меня есть опыт программирования. Итак, если возникает какая-то незначительная ошибка, должно быть какое-то простое решение для нее. В целом эта проблема не касается многопоточности или параллелизма. На мой взгляд, решение таких проблем должно быть в первых строках поиска Google, но это не так (особенно если это связано с официальными документами). Итак, это первый тревожный сигнал для меня, чтобы я продолжал работать с Java.

mr.boris 14.11.2018 10:59

Вообще говоря, я согласен с тем, что лучше начать с простого, и отказ от чего-то вроде Maven, вероятно, даст вам лучший начальный опыт работы с Java, однако, как вы определили, это все еще простой пример симпатичный, поэтому я не думаю, что это ужасный способ начать. Мой обычный первый шаг для устранения подобных проблем - это проверить сгенерированный файл JAR, сначала подтвердить, что он существует в вашем каталоге /target и имеет ожидаемое имя (вероятно), а затем, поскольку это всего лишь zip-файл, вы можете распаковать его. его и убедитесь, что содержимое соответствует структуре вашего проекта.

DaveyDaveDave 14.11.2018 11:21

Как бы то ни было, выполнение описанных выше шагов (без ссылки на руководство) отлично работает для меня, без настройки упомянутых вами элементов properties. Я подозреваю, что проблема в другом ... Может быть, в версиях Maven / Java?

DaveyDaveDave 14.11.2018 11:26

вы запускаете команду java ... из основного каталога проекта? Попробуйте оттуда jar -tf target/my-app-1.0-SNAPSHOT.jar, чтобы посмотреть, что внутри банки, чтобы убедиться, что класс App находится там с правильным путем.

Chirlo 14.11.2018 11:32

@Chirlo, спасибо, эта команда у меня не работает: java.nio.file.NoSuchFileException: target/my-app-1.0-SNAPSHOT.jar

mr.boris 14.11.2018 11:38

@DaveyDaveDave, спасибо за ответ. Я использую версию Java 11.0.1 2018-10-16 LTS и 3.6.0 для Apache Maven. Я не знаю, почему то же самое работает для вас, но не работает для меня.

mr.boris 14.11.2018 11:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
10
1 003
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете повторить попытку с этими 4 коммендами:

> mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
> cd my-app
> mvn package
> java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

Спасибо за тестирование этого образца. У меня ошибка на шаге mvn package .. BUILD FAILURETarget option 1.5 is no longer supported. Use 1.6 or later.. По крайней мере, на этом этапе мне нужно добавить properties в файл pom.xml.

mr.boris 14.11.2018 11:46

Основываясь на ваших выводах команды jar (NoSuchFileException из комментариев), кажется, что вы запускали команду java из некоторого каталога, отличного от каталога проекта maven. Ответ @Sgrillon работает, потому что он меняет каталог на каталог my-app, запускает команду mvn package, а затем команду java из того же каталога. Затем есть target/my-app-1.0-SNAPSHOT.jar (сгенерированный maven) и его можно найти с помощью команды java, чтобы включить его в свой путь к классам (-cp) Это не проблема java или maven, а проблема с путем к файлу.

РЕДАКТИРОВАТЬ: Я только что понял на вашем pom.xml, что ваш артефакт назван maven-test

  <artifactId>maven-test</artifactId>

В этом случае банка была бы target/maven-test-1.0-SNAPSHOT.jar вместо my-app..., и поэтому ни java, ни jar не смогли ее найти.

Спасибо, теперь все работает после удаления текущего проекта и повторения всех шагов снова, несмотря на тот факт, что мне пришлось немного изменить properties в файле pom.xml для правильного управления версиями компилятора Maven. На самом деле, я пытался запустить файл .jar из того же каталога (из корня проекта), поэтому я понятия не имею, почему произошла эта ошибка.

mr.boris 14.11.2018 13:48

@ Mr.boris, см. Мою правку ответа, вы вручную изменили artifactId в pom.xml ??

Chirlo 14.11.2018 15:44

@Chirlo, что изменится с artifactId с maven-test. У меня такая же проблема

Hana 06.02.2019 18:12

@ Хана, не знаю, о чем ты спрашиваешь. В этом вопросе OP, вероятно, изменил параметр -DartifactId=my-app на -DartifactId=maven-test при создании проекта, но изменил его при вызове java -cp target/my-app-1.0-SNAPSHOT.jar ....

Chirlo 06.02.2019 19:18

Другие вопросы по теме