Java Maven Не удалось найти или загрузить основной класс - PullRequest
0 голосов
/ 14 ноября 2018

Я только начал изучать 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>

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Судя по выводу команды 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 не могли его найти.

0 голосов
/ 14 ноября 2018

Вы можете повторить попытку с помощью 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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...