Jak uruchomić napisaną aplikację na innym komputerze

0

Cześć,
Mam napisaną aplikację webową w IntelliJ która po uruchomieniu w IDE działa normalnie w przeglądarce (na komputerze gdzie jest IDE). Łączy się z baza MySQL (zapisuje/odczytuje). Chciałbym jednak uruchomić ją aplikację na innym komputerze. Proszę o pomoc jak się do tego zabrać.

Z góry dziękuję za pomoc.

1

To jest .class, JAR, WAR czy EAR?

2
  1. Jeśli drugi komputer jest w tej samej sieci lokalnej co główny, to w przeglądarce zamiast localhost podajesz ip komputera głównego i port.
  2. Jeśli chcesz odpalić to na komputerze nie znajdującym się w sieci lokalnej musisz to wystawić na świat. heroku / chmura amazonowa
  3. Spakuj swoją apkę do jara i odpal go na drugim komputerze, wtedy po wejściu na localhost apka będzie uruchomiona. Pamiętaj, że bazę też masz zapewne lokalną, więc musisz ją "wystawić na świat".

Wybierz jedno.

0
vpiotr napisał(a):

To jest .class, JAR, WAR czy EAR?

Nie wiem czy o to chodzi, ale w lewym górnym rogu w IDE w projekcie pisze ".mvn->warpper".

kixe52 napisał(a):
  1. Jeśli drugi komputer jest w tej samej sieci co główny, to w przeglądarce zamiast localhost podajesz ip komputera głównego i port.
  2. Jeśli chcesz odpalić to na komputerze nie znajdującym się w sieci lokalnej musisz to wystawić na świat. heroku / chmura amazonowa
  3. Spakuj swoją apkę do jara i odpal go na drugim komputerze, wtedy po wejściu na localhost apka będzie uruchomiona. Pamiętaj, że bazę też masz zapewne lokalną, więc musisz ją "wystawić na świat".

Chciałbym postawić aplikację całkowicie od nowa z nową bazą danych. Komputer na którym mam IDE nie jest w sieci.

Właśnie nie wiem jak apkę spakować w IDE do JAR. A później ten JAR powinien się automatycznie uruchamiać na nowym komputerze w przypadku np restartu maszyny -> taki a'la serwer. No i jeszcze kwestia bazy danych. Jak ją zrobić i sparować na nowym komputerze z aplikacją?

1

Chcesz aby apkę można było odpalić na tylko jednym, innym komputerze? Czy myślisz o tym aby apkę odpalić z dowolnego komputera na świecie, mając jej adres?

Jeśli to pierwsze, to pakowanie w jara wystarczy. googluj: maven how to make jar. Co do bazy eksport/import wystarczy jeśli mowa o jednym komputerze użytkującym.

Jeśli to drugie to musisz postawić swoją aplikacje na chmurze. Np na wspomnianym heroku. Bazę też możesz wystawić publicznie, wtedy w propertisach swojej aplikacji, tam gdzie podajesz jdbc string bazy danych, zamiast localhost podajesz adres bazy, który Ci się wygeneruje po wystawieniu jej publicznie.

0
kixe52 napisał(a):

Chcesz aby apkę można było odpalić na tylko jednym, innym komputerze? Czy myślisz o tym aby apkę odpalić z dowolnego komputera na świecie, mając jej adres?

Jeśli to pierwsze, to pakowanie w jara wystarczy. googluj: maven how to make jar. Co do bazy eksport/import wystarczy jeśli mowa o jednym komputerze użytkującym.

Jeśli to drugie to musisz postawić swoją aplikacje na chmurze. Np na wspomnianym heroku. Bazę też możesz wystawić publicznie, wtedy w propertisach swojej aplikacji, tam gdzie podajesz jdbc string bazy danych, zamiast localhost podajesz adres bazy, który Ci się wygeneruje po wystawieniu jej publicznie.

Chce aby można było się łączyć z wielu komputerów. Jako serwer będzie jeden z komputerów domowych -> to ma być w lokalnej sieci domowej, ale wystawienie tego na świat wydaje się interesujące i na pewno nie wzgardzę przyjęciem takiej wiedzy.

0

No to napisałem Ci co masz googlować.

Wiele komputerów w sieci domowej? Co to za sieć? Na pewno domowa?

1

Jeżeli serwer stoi na Linuxie, to polecam Dockera. Raz widziałem go w akcji na Windowsie i niestety zamulał straszliwie (oczywiście nie musi tak być w tym przypadku).

0

Dobra to coś już wiemy. Kliknij w IntelliJ w zakładce z mavenem (po prawej stronie) package. Następnie w katalogu "target" w projekcie pojawi sie plik cośtam.jar. Bierzesz ten plik tam gdzie chcesz to odpalić. Klikasz 2x albo z konsoli java -jar cośtam.jar i voila. O ile jest to jakis Spring Boot to wystartuje ci aplikacje na jakimś porcie 8080. Teraz jeśli inne maszyny w sieci widzą komputer na którym to odpaliłeś (są w tej samej sieci lokalnej) i nie blokuje niczego firewall, to powinno działać.

0
dr_Misiek napisał(a):

Cześć,
Mam napisaną aplikację webową w IntelliJ która po uruchomieniu w IDE działa normalnie w przeglądarce (na komputerze gdzie jest IDE). Łączy się z baza MySQL (zapisuje/odczytuje). Chciałbym jednak uruchomić ją aplikację na innym komputerze. Proszę o pomoc jak się do tego zabrać.

Z góry dziękuję za pomoc.

Jak udało Ci się uruchomić aplikacje na aktualnym komputerze to jaki masz problem żeby uruchomić ją na innym komputerze? Ten inny komputer jest jakiś kwantowy czy co...

0
lookacode1 napisał(a):
dr_Misiek napisał(a):

Cześć,
Mam napisaną aplikację webową w IntelliJ która po uruchomieniu w IDE działa normalnie w przeglądarce (na komputerze gdzie jest IDE). Łączy się z baza MySQL (zapisuje/odczytuje). Chciałbym jednak uruchomić ją aplikację na innym komputerze. Proszę o pomoc jak się do tego zabrać.

Z góry dziękuję za pomoc.

Jak udało Ci się uruchomić aplikacje na aktualnym komputerze to jaki masz problem żeby uruchomić ją na innym komputerze? Ten inny komputer jest jakiś kwantowy czy co...

Hehe, nie kwantowy ale blisko :-)
Aplikacja uruchamia się zielonym przyciskiem w IntelliJ, w taki sposób można sprawdzić działąnie pisanej przez nas aplikacji.

0
kixe52 napisał(a):

No to napisałem Ci co masz googlować.

Wiele komputerów w sieci domowej? Co to za sieć? Na pewno domowa?

Tak jest na pewno domowa :-) jest w sumie 5 komputerów.
Jeden z nich na Windows 10 Pro służy jako "serwer".
Takie tam wiecie domowa "chmura" :-)

I chciałem dodać napisany program tak aby można go było używać na wszystkich komputerach.

0

No to robisz tak jak Ci pisałem ja + @Shalom. Pakujesz apke do jara (mavenem, odpowiedni plugin, poczytaj :) ), uruchamiasz to na swoim komputerze - serwerze, a resztą komputerów łączysz się przez podanie adresu ip tego lokalnego sererwa i odpowiedniego portu (patrz post Shaloma).

0
kixe52 napisał(a):

No to robisz tak jak Ci pisałem ja + @Shalom. Pakujesz apke do jara (mavenem, odpowiedni plugin, poczytaj :) ), uruchamiasz to na swoim komputerze - serwerze, a resztą komputerów łączysz się przez podanie adresu ip tego lokalnego sererwa i odpowiedniego portu (patrz post Shaloma).

OK, poszukam i będę działał. A jak z baza danych?

0

OK, poszukam i będę działał. A jak z baza danych?

Instalujesz mysql lokalnie obok apki lub zmieniasz konfigurację dataSource (ip do bazy) jeżeli baza stoi gdzieś indziej.

EDIT
Zainstaluj dockera jak człowiek :)

0
Shalom napisał(a):

Dobra to coś już wiemy. Kliknij w IntelliJ w zakładce z mavenem (po prawej stronie) package. Następnie w katalogu "target" w projekcie pojawi sie plik cośtam.jar. Bierzesz ten plik tam gdzie chcesz to odpalić. Klikasz 2x albo z konsoli java -jar cośtam.jar i voila. O ile jest to jakis Spring Boot to wystartuje ci aplikacje na jakimś porcie 8080. Teraz jeśli inne maszyny w sieci widzą komputer na którym to odpaliłeś (są w tej samej sieci lokalnej) i nie blokuje niczego firewall, to powinno działać.

Udało się zrobić plik JAR. Jednak podwójne kliknięcie w niego nic nie daje. Aplikacja jest napisana w oparciu o springa. Z tego co poczytałem to apke trzeba odpalić na tomkacie. Ściągnąłem już toma ze strony (https://tomcat.apache.org/) plik JAR wrzuciłem do folderu WORK ale nie wiem co dalej. JAk się uruchamia tego tomcata żeby uruchomił aplikację?

0

Jeżeli spakowałeś to w jar to prawdopodobnie masz już embedded Tomcata, tak zwany fat jar. Odpal sobie go poleceniem np. w cmd albo PowerShellu. Powinno działać. Na Tomcacie zewnętrznym deployujesz paczki war.

0
Belka napisał(a):

Jeżeli spakowałeś to w jar to prawdopodobnie masz już embedded Tomcata, tak zwany fat jar. Odpal sobie go poleceniem np. w cmd albo PowerShellu. Powinno działać. Na Tomcacie zewnętrznym deployujesz paczki war.

Jak zrobić paczę WAR z projektu?

0
  1. Musisz zrobić fat jar. Jeśli to spring boot to cos takiego w pomie:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <archiveClasses>true</archiveClasses>
                    <archive>
                        <manifest>
                            <mainClass>cośtam.cośtam.TwojaKlasaZMain</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
  1. Jak dwuklik nie działa to łaskawie odpal konsole i wpisz java -jar cośtam.jar to przynajmniej będzie wiadomo co za błąd poleciał.
0
dr_Misiek napisał(a):

Jak zrobić paczę WAR z projektu?

Z tego co kojarzę musisz dodać dependecy z Tomcatem:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>

do tego zaznaczyć w pomie, że apka ma być pakowana jako war, np.:

<groupId>com.yourapp</groupId>
	<artifactId>Your-App</artifactId>
	<version>1.0-RELEASE</version>
	<packaging>war</packaging>
	<name>Your-App</name>

No i klasę main SpringBootową trzeba wzbogacić o :

public class MainClassInYourProject extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(MainClassInYourProject.class);
	}

czyli Twoja klasa main powinna rozszerzać SpringBootServletInitializer i przesłaniać metodę configure. Być może są inne sposoby, ale ja właśnie tak rozwiązałem kiedyś kwestię konwersji apki pakowanej w jar na war.

0

Nie rozumiem niektórych postów. Widzicie, że @dr_Misiek dopiero uczy się stawiać apkę, nie rozumie slangu którym większość doświadczonych osób ze sobą rozmawia, a do tego dokładacie jeszcze kolejne skróty jakbyście chcieli komuś zaimponować i mieszacie :/ Jak dziecko by się chciało uczyć programować to też mu będziecie mówić, że ma sobie "zbudować wara i zdiplojować sobie to na tomkacie i najlepiej to trzymaj eskjuela w dokerze bo na to jest hajp"?

Jeśli już stworzyłeś plik z rozszerzeniem jar to odpal sobie konsolę (jeśli masz Windowsa to kliknij Start i wpisz cmd, enter), następnie musisz znaleźć ten plik w systemie.
Kliknij sobie prawym przyciskiem myszy na na swój plik jar, następnie Właściwości i w zakładce Ogólne będziesz miał ścieżkę folderu w który znajduje się twój plik. Skopiuj to.
W konsoli którą odpaliłeś wpisz najpierw nazwę dysku na którym znajduje się plik (pierwsza litera w ścieżce) i naciśnij enter np. jeśli plik leży na dysku D to w konsoli wpisz D: i naciśnij enter. Następnie w konsoli wpisz cd i po spacji wklej ścieżkę którą wcześniej skopiowałeś (prawym przyciskiem myszy). Teraz znajdujesz się w katalogu w którym masz swój plik jar. Dla pewności wylistuj sobie pliki w folderze wpisując dir i naciśnij enter. Jeśli masz pewność, że tam leży twój plik wpisz sobie java -jar i po spacji wklej swoją nazwę pliku np. java -jar stronainternetowa.jar. Po tym twoja aplikacja powinna zacząć się uruchamia i powinieneś widzieć logi aplikacji w konsoli.
Jeśli nie zadziała to daj znać i wrzuć tutaj to co ci konsola pokazała (zaznacz lewym przyciskiem myszy od góry do dołu i kliknij prawym klawiszem na ten tekst po zaznaczeniu żeby skopiować), bo teraz możemy jedynie się domyślać w jaki sposób sobie stworzyłeś aplikację.

1
OtoKamil napisał(a):

Nie rozumiem niektórych postów. Widzicie, że @dr_Misiek dopiero uczy się stawiać apkę, nie rozumie slangu którym większość doświadczonych osób ze sobą rozmawia, a do tego dokładacie jeszcze kolejne skróty jakbyście chcieli komuś zaimponować i mieszacie :/ Jak dziecko by się chciało uczyć programować to też mu będziecie mówić, że ma sobie "zbudować wara i zdiplojować sobie to na tomkacie i najlepiej to trzymaj eskjuela w dokerze bo na to jest hajp"?

Skoro ktoś nie rozumie to może dla niego za wcześnie na takie tematy? Ciężko kilkuletniemu dziecku tłumaczyć zasady ortografii jeśli nawet liter nie zna.

0
Belka napisał(a):
dr_Misiek napisał(a):

Jak zrobić paczę WAR z projektu?

Z tego co kojarzę musisz dodać dependecy z Tomcatem:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>

do tego zaznaczyć w pomie, że apka ma być pakowana jako war, np.:

<groupId>com.yourapp</groupId>
	<artifactId>Your-App</artifactId>
	<version>1.0-RELEASE</version>
	<packaging>war</packaging>
	<name>Your-App</name>

No i klasę main SpringBootową trzeba wzbogacić o :

public class MainClassInYourProject extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(MainClassInYourProject.class);
	}

czyli Twoja klasa main powinna rozszerzać SpringBootServletInitializer i przesłaniać metodę configure. Być może są inne sposoby, ale ja właśnie tak rozwiązałem kiedyś kwestię konwersji apki pakowanej w jar na war.

Tak wyglądają moje dependencis w pliku pom:

<dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <version>2.1.5.RELEASE</version>
    </dependency>

</dependencies>

Fragment kodu klasy w której jest informacja o uruchomieniu apki:

najpierw są importy i to:

@Controller
public class CustomerController {

private final CustomerServices customerServices;
private final UserServices userServices;
public CustomerController(CustomerServices customerServices, UserServices userServices) {
    this.customerServices = customerServices;
    this.userServices = userServices;
}

@GetMapping("")
public String index(ModelMap map){
    User user = userServices.getLoggedInUser();
    map.addAttribute("userLogin", user.getLogin());
    return "index";
}
1

Nie pokazałeś "górnej" części poma. Tam w tagu packaging deklarujesz formę pliku wynikowego aplikacji. To dependency, które Ci pokazałem w poprzednim poście powinieneś dołożyć to swoich zależności w pom'ie.

Jeśli chodzi o kod, to wysłałeś zawartość klasy jakiegoś kontrolera. Ja natomiast wcześniej mówiłem o klasie main. To jest klasa, z której odpalasz projekt. Zapewne jest ona dość treściwa i zawiera coś w stylu:

public static void main(String[] args) {
        SpringApplication.run(IsRentalApplication.class, args);
}
0
OtoKamil napisał(a):

Nie rozumiem niektórych postów. Widzicie, że @dr_Misiek dopiero uczy się stawiać apkę, nie rozumie slangu którym większość doświadczonych osób ze sobą rozmawia, a do tego dokładacie jeszcze kolejne skróty jakbyście chcieli komuś zaimponować i mieszacie :/ Jak dziecko by się chciało uczyć programować to też mu będziecie mówić, że ma sobie "zbudować wara i zdiplojować sobie to na tomkacie i najlepiej to trzymaj eskjuela w dokerze bo na to jest hajp"?

Jeśli już stworzyłeś plik z rozszerzeniem jar to odpal sobie konsolę (jeśli masz Windowsa to kliknij Start i wpisz cmd, enter), następnie musisz znaleźć ten plik w systemie.
Kliknij sobie prawym przyciskiem myszy na na swój plik jar, następnie Właściwości i w zakładce Ogólne będziesz miał ścieżkę folderu w który znajduje się twój plik. Skopiuj to.
W konsoli którą odpaliłeś wpisz najpierw nazwę dysku na którym znajduje się plik (pierwsza litera w ścieżce) i naciśnij enter np. jeśli plik leży na dysku D to w konsoli wpisz D: i naciśnij enter. Następnie w konsoli wpisz cd i po spacji wklej ścieżkę którą wcześniej skopiowałeś (prawym przyciskiem myszy). Teraz znajdujesz się w katalogu w którym masz swój plik jar. Dla pewności wylistuj sobie pliki w folderze wpisując dir i naciśnij enter. Jeśli masz pewność, że tam leży twój plik wpisz sobie java -jar i po spacji wklej swoją nazwę pliku np. java -jar stronainternetowa.jar. Po tym twoja aplikacja powinna zacząć się uruchamia i powinieneś widzieć logi aplikacji w konsoli.
Jeśli nie zadziała to daj znać i wrzuć tutaj to co ci konsola pokazała (zaznacz lewym przyciskiem myszy od góry do dołu i kliknij prawym klawiszem na ten tekst po zaznaczeniu żeby skopiować), bo teraz możemy jedynie się domyślać w jaki sposób sobie stworzyłeś aplikację.

Dziękuję za zrozumienie.
Zrobiłem jak pisałeś i pojawiło się w konsoli dużo rzeczy. Na końcu konsola weszła w tryb dalszego wpisywania komend.

0
Belka napisał(a):

Nie pokazałeś "górnej" części poma. Tam w tagu packaging deklarujesz formę pliku wynikowego aplikacji. To dependency, które Ci pokazałem w poprzednim poście powinieneś dołożyć to swoich zależności w pom'ie.

Jeśli chodzi o kod, to wysłałeś zawartość klasy jakiegoś kontrolera. Ja natomiast wcześniej mówiłem o klasie main. To jest klasa, z której odpalasz projekt. Zapewne jest ona dość treściwa i zawiera coś w stylu:

public static void main(String[] args) {
        SpringApplication.run(IsRentalApplication.class, args);
}

Górna część pom wygląda tak:

<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/>
</parent>
<groupId>pl.rafalwolinski</groupId>
<artifactId>webspringcrm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>webspringcrm</name>
<description>Demo project for Spring Boot</description>

<properties>
    <java.version>1.8</java.version>
</properties>

Nie mam klasy MAIN.

0
dr_Misiek napisał(a):

Nie mam klasy MAIN.

Ale apka sie normalnie uruchamia z poziomu IDE? To musisz mieć klasę main. To jest klasa/plik z którego startuje projekt.

a to <packaging>war</packaging> wrzucasz analogicznie między name, groupId itd tak jak w przykładzie zacytowanym, który Ci udostępniłem.

0
Belka napisał(a):
dr_Misiek napisał(a):

Nie mam klasy MAIN.

Ale apka sie normalnie uruchamia z poziomu IDE? To musisz mieć klasę main. To jest klasa/plik z którego startuje projekt.

a to <packaging>war</packaging> wrzucasz analogicznie między name, groupId itd tak jak w przykładzie zacytowanym, który Ci udostępniłem.

Nie mam maina, apka startuje z metody która ma w adnotacji @GetMapping("") ustawione "nic" -> dalej metoda wskazuje templatkę jaka ma zostać wyświetlona i w taki sposób uzyskałem możliwość otwarcia apki po wpisaniu w przeglądarkę: localhost:(tu podany port)

0

Zrobiłem plik WAR korzystając z podpowiedzi użytkownika BELKA.
To teraz ten plik trzeba uruchomić na komputerze serwer, tak aby można było się połączyć z programem przez przeglądarkę.
Jak to uruchomić na komputerze z Windowsem?

0
dr_Misiek napisał(a):

Zrobiłem plik WAR korzystając z podpowiedzi użytkownika BELKA.
To teraz ten plik trzeba uruchomić na komputerze serwer, tak aby można było się połączyć z programem przez przeglądarkę.
Jak to uruchomić na komputerze z Windowsem?

Jak uruchamiasz Tomcata (pewnie trzeba jakas usluge włączyc w Windowsie services.msc w uruchom) wchodzisz przez przeglądarkę http://localhost:<port-tomcata>/manager i tam wybierasz jaki ma byc przedrostek URL (context path) oraz podajesz ścieżkę do pliku war.

1 użytkowników online, w tym zalogowanych: 0, gości: 1