Не могу найти файл webapp-runner.jar в java web приложении
Я пытаюсь залить свое java приложение на хостинг heroku. Задеплоить его не удается. Спустя несколько дней поиска я понял, что в файле Procfile должен лежать путь к webapp-runner.jar. В туториалах этот файл выглядит так:
web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
Я использую eclipse и только недавно конвертировал свой проект в maven project. Где может быть этот файл? Или может быть, его нужно откуда-то скачать и установить самостоятельно?
На всякий случай, мой 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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>BlagoDari</groupId>
<artifactId>BlagoDari</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.heroku</groupId>
<artifactId>webapp-runner</artifactId>
<version>9.0</version>
<destFileName>webapp-runner.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
Ответы (1 шт):
Создаем папку в корне проекта для артефактов, например
artifacts, которую потом будем загружать (можно вместе со всем проектом) наheroku.git.В настройках сборки проекта
mavenуказываем имя выходного файлаwar, напримерawesomeapp:<build> <finalName>awesomeapp</finalName> <defaultGoal>package</defaultGoal> <plugins> . . . </plugins> </build>В настройках
maven-dependency-pluginпри добавлении артефактаwebapp-runnerнужно указать для него папку, в которую его надо положить. Указываемartifacts:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>com.heroku</groupId> <artifactId>webapp-runner</artifactId> <version>9.0.31.0</version> <destFileName>webapp-runner.jar</destFileName> </artifactItem> </artifactItems> <outputDirectory>artifacts</outputDirectory> </configuration> </execution> </executions> </plugin>В настройках
maven-war-pluginтоже нужно указать выходную папку, куда положить само приложение - туда же вartifacts:<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.3.0</version> <configuration> <goal>war:inplace</goal> <outputDirectory>artifacts</outputDirectory> </configuration> </plugin>В корне проекта в файле
Procfileуказываем:web: java $JAVA_OPTS -jar artifacts/webapp-runner.jar --port $PORT artifacts/awesomeapp.warСобираем проект из
IDEс помощьюmavenpackagegoal. Проверяем наличие этих двух файлов (webapp-runner.jarиawesomeapp.war) в указанной директории, также проверяем наличие самогоProcfile. Коммитим эти три файла (можно весь проект целиком) и заливаем наheroku.git.