ukryj menu
SPEC
aktualizacja: 2022-05-13 21:04:36
Deploy projektu na Heroku
poniżej przedstawiam sposób postępowania prowadzący do uploadu projektu z Intellij bezpośrednio na Heroku
procedura nie jest skomplikowana, a bardzo efektywna, bo zaraz można przetestować działanie na Heroku
wykorzystuje ona odpowiedni plugin mavena, który kompiluje i uploaduje aplikację na Heroku
1. pom.xml
dodajemy plugin heroku
uwaga: w odpowiednim miejscu trzeba podać nazwę aplikacji utworzonej na Heroku
<appName>heroku-app-name-01</appName>kopiuj
poniżej cały plik pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>heroku-app</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>3.0.3</version>
<configuration>
<appName>heroku-app-name-01</appName>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
</dependencies>
</project>kopiuj
2. plik Procfile
jest to plik konfiguracyjny, potrzebny heroku do identyfikacji:
- jaki proces ma uruchomić (web)
- jakie skompilowane pliki są odpowiedzialne za działanie aplikacji, pobrane z katalogu /target aplikacji
- jaka jest nazwa klasy wejściowej
plik Procfile (bez żadnego rozszerzenia) wstawiamy w głównym katalogu aplikacji
jego zawartość
web: java $JAVA_OPTS -cp target/classes:target/dependency/* Appkopiuj
struktura katalogów aplikacji wygląda w tym wypadku jak poniżej
src/main/java/App.javakopiuj
3. plik system.properties - wersja javy
plik system.properties (bez żadnego rozszerzenia) wstawiamy w głównym katalogu aplikacji
a w nim podajemy wersję javy (domyślnie jest java 8)
java.runtime.version=17kopiuj
https://devcenter.heroku.com/articles/java-support#supported-java-versions
4. port
funkcja main nie może podawać na sztywno portu, jak wtedy kiedy korzystamy z aplikacji lokalnie, trzeba podać dynamicznie uzyskiwany port z Heroku
w App
port(getHerokuPort());kopiuj
i funkcja
static int getHerokuPort() {
ProcessBuilder processBuilder = new ProcessBuilder();
if (processBuilder.environment().get("PORT") != null) {
return Integer.parseInt(processBuilder.environment().get("PORT"));
}
return 4567;
}kopiuj
5. skompiluj projekt z menu run
i sprawdź czy w katalogu target/classess/...
pojawiła się skompilowany plik App i inne
6. konfiguracja run w Intellij
służy już do deployu na heroku
- z menu run/edit configurations wybierz +
Mavenkopiuj
- w linii command line wpisz
heroku:deploykopiuj
- odpalenie z menu run
run [deploy]kopiuj
- rebuild
po zmianach trzeba przebudować projekt
menu build/rebuildkopiuj
7. problem z deployem
w razie problemu z autentykacją deployu na heroku widoczną w terminalu intellij
- instalujemy heroku-cli
https://devcenter.heroku.com/articles/heroku-cli
- restart intelliJ
- uruchamiamy terminal
- polecenie
heroku loginkopiuj
- logujemy się w oknie przeglądarki (albo w terminalu)
- deploy projektu
- mogą oczywiście pojawić się błędy już po deployu - wtedy czytamy logi na heroku
Uwaga: jeśli w terminalu nie widać polecenia heroku, można uruchomić z lokalizacji gdzie cli się zainstalowało
działająca na heroku poprzednia aplikacja
https://ds-sparkapp-06.herokuapp.com/kopiuj