2015-09-16 3 views
-1

Ниже мой пример файл класса:Maven команда выполнения проекта

package org.foo.tutorial; 

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

Для выполнения проекта (рамки Maven) бежим:

>java -cp Something-1.0.SNAPSHOT.jar org.foo.tutorial.APP 

Эта команда отлично работает и дает мне выход «HELLO WORLD».

Однако, если я уеду из третьего аргумента в команде выше (org.foo.tutorial.APP) я получаю следующее сообщение об ошибке:

Error: Could not find or load main class target.MavenTutorialApp-1.0-SNAPSHOT.jar 

Мой вопрос:

Почему должен groupId и имя приложения, когда я поставляю весь файл «jar»?

ответ

1

Ошибка немного неверна. Ваша команда java неверна, так как вы не укажете класс. Код Something-1.0.SNAPSHOT.jar предназначен для использования в качестве опции -cp, но java интерпретирует его как класс .

Вот как java ведет себя

The java command starts a Java application. It does this by starting a Java runtime environment, loading a specified class, and calling that class's main method.

Если файл .jar содержит entry point, заданную Main-Class заголовка в манифесте, то вы можете просто запустить

java -jar Something-1.0.SNAPSHOT.jar 
0

Позвольте мне ответить на ваш вопрос ,

Why should the groupId and app name matter when I am supplying the entire 'jar' file ?

Позволяет разделить вопрос на более мелкие части -

What is group id? - Идентификатор группы проекта.

What is artifactId? - Идентификатор артефакта (проекта) и вне курса является частью имени артефакта по умолчанию.

При запуске java-программы под jvm нет такого эффекта, как то, как вы построили jar, например, он создается процессом сборки maven или gradle или даже командной строки.

Вещи, которые имеют значение, являются файлом jar и точкой входа или классом, где находится основная.


Это может быть вне сферы охвата этого вопроса, но я чувствовал себя соответствующим.

Чтобы запустить java-программу из jar-файла, вы можете явно указать, как указано выше. Кроме того, вы можете создать исполняемый файл банку, добавив файл манифеста, где определить точку входа исполняемого файла -

Main-Class: org.foo.tutorial.APP

  1. How to create executable jar?
  2. Также Maven maven-assembly-plugin помогает упаковать исполняемую банку. help
Смежные вопросы