Что мне нужно добавить в мой pom. xml, чтобы запустить этот файл c Java? - PullRequest
1 голос
/ 08 мая 2020

Я не разработчик Java и не знаком с упаковкой и сборкой Java программ. Я пытаюсь запустить этот файл: https://github.com/CodinGame/SpringChallenge2020/blob/master/src/test/java/Spring2020Main.java

, выполнив

mvn clean install
java -jar .\target\spring-2020-1.0-SNAPSHOT.jar

, но получаю эту ошибку:

no main manifest attribute, in .\target\spring-2020-1.0-SNAPSHOT.jar

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

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 08 мая 2020

Вы можете выполнить следующие шаги:

  1. Переместить Spring2020Main.java в src/main/java/com/codingame каталог
  2. Добавьте в свой pom. xml после </dependencies>:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.codingame.Spring2020Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>    
Запустить сборку maven, используя mvn clean install Выполнить программу, используя java -jar target/spring-2020-1.0-SNAPSHOT.jar

Информация: Apache Плагин Maven Shade помогает в создании того, что называется убер-банкой или жирной банкой. Это означает, что все зависимости упаковываются как часть результирующего файла jar без необходимости в каких-либо «библиотеках», которые вам нужно добавить в classpath при выполнении файла jar. В рамках финального файла jar нам нужно указать, какой файл следует рассматривать как основной файл для выполнения. Обычно это делается с помощью файла META-INF/MANIFEST.MF внутри uber-jar. Вот что за нас делает transformer, указанный внутри configuration плагина.

2 голосов
/ 08 мая 2020

Несколько вещей, которые нужно понять о Java:

1) Если у вас есть проект Maven, подобный этому, код разделен между каталогами src/main/ и src/test/. src/test/ предназначен для юнит-тестов. В вашем случае Spring2020Main на самом деле не настроен как модульный тест, поэтому я не уверен, что здесь задумал автор.

2) Когда вы компилируете с использованием mvn clean install, jar (библиотека) построен, но ничего из src/test не будет включено в вывод.

Обычно тесты выполняются во время сборки. И этот был бы, если бы он не был настроен как настоящий тест junit, поэтому он не запускался во время сборки.

3) Вы можете переместить файл из src/test/java в src/main/java, и он будет будет встроен в ваш результирующий jar.

4) В этом случае, когда вы запускаете JVM, вам нужно указать classpath . Это список всех библиотек, которые нужно включить при запуске приложения. Вам также необходимо указать (полное) имя класса для запуска:

java -cp target/spring-2020-1.0-SNAPSHOT.jar Spring2020Main

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

Как указывали другие, решением может быть создание самоисполняющейся jar, но простейшим для вы должны запустить это из IDE:

Запустите это из IntelliJ. Если вы не установили его, установите его.

1) File > New From Existing Sources, найдите каталог, в котором он находится.

2) При запросе Import Project from Existing Model (Maven )

3) Когда доступен вид проекта (alt-1) или View > Tool Windows > Project, вы можете расширять структуру до тех пор, пока не найдете Spring2020Main в тестовом каталоге.

4) Щелкните его правой кнопкой мыши и выберите «Выполнить».

Для меня он показал веб-сервер, работающий по адресу http://localhost: 8888 / test. html

1 голос
/ 08 мая 2020

Связанный вами проект имеет только базовую c настройку для компиляции (хотя этого было бы достаточно, чтобы запустить его из IDE).

Что вам нужно, так это исполняемый jar. Проверьте эту ветку.

Как упоминалось другими (и я не заметил), класс, с которым вы связались, является тестовым классом, поэтому по умолчанию он не может быть включен в jar. Запустите его через IDE или настройте в соответствующем исходном каталоге.

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