Maven Maven deploy

bene2808

Aktives Mitglied
Moin!

Arbeite gerade an einem Projekt, bei dem eine grafische Komponente zu Testzwecken auf meinem Desktop angezeigt werden soll (Swing) und bei dem eigentliche Anwendung eine Android App ist. Den Desktop Teil würde ich gerne in Eclipse entwickeln, den Android Teil in Android Studio. Natürlich haben beide Teile ein gemeinsames "Backend", das ich gerne auch in Eclipse entwickeln würde. Es wäre praktisch, wenn ohne viel Aufwand das Backend geändert und die Abhängigkeit in den Frontends aktualisiert werden könnten. Außerdem sollen mehrere Leute an mehreren Rechnern an diesem Projekt arbeiten können.

Meine Idee zur Lösung ist also, das Backend mit Maven deploy in ein Repository auf meinem Raspberry Pi zu schieben und die jar sowohl im Android als auch im Desktop Projekt einzubinden. Jetzt habe ich folgende Fragen:
  1. Ist das mit Maven etc. ein legitimer Ansatz oder fällt hier jemandem vielleicht etwas viel Einfacheres genauso "Nachhaltiges" ein? 😀
  2. Wenn ich kleine Änderungen am Backend mache und die mit deploy auf meinen Pi schiebe ohne die Version zu ändern, bemerkt Maven das dann anhand des Änderungsdatums trotzdem und lädt die neue Version der jar für die Frontend Projekte neu herunter?
  3. Wenn ich Maven deploy aufrufe, landet die jar dann auch automatisch in meinem lokalen Repository auf meinem aktuellen Rechner? Sodass ich für die Frontend Projekte beim Neu-Einbinden des Backends nicht ständig das Netzwerk bemühen muss, wenn ich am gleichen Rechner bleibe?

Danke schon mal! 🙂
 
Ist das mit Maven etc. ein legitimer Ansatz oder fällt hier jemandem vielleicht etwas viel Einfacheres genauso "Nachhaltiges" ein? 😀
Maven passt dafür schon 🙂
Wenn ich kleine Änderungen am Backend mache und die mit deploy auf meinen Pi schiebe ohne die Version zu ändern, bemerkt Maven das dann anhand des Änderungsdatums trotzdem und lädt die neue Version der jar für die Frontend Projekte neu herunter?
Jein – Maven kennt "Snapshot"-Versionen, dabei müsste jeweils die neuste geladen werden (oder zumindest regelmäßig, alternativ kann man es auch immer explizit anstoßen, das geht auch automatisch beim Build.
"Normale" Versionen muss man dagegen explizit updaten, also die Version in der build.gradle/pom.xml manuell erhöhen.

Ein generelles "immer die neuste Version" gibts aus guten Gründen nicht – es sollen ja nicht alle anderen Projekte kaputt gehen, nur weil du das eine Projekt änderst.

Wenn ich Maven deploy aufrufe, landet die jar dann auch automatisch in meinem lokalen Repository auf meinem aktuellen Rechner? Sodass ich für die Frontend Projekte beim Neu-Einbinden des Backends nicht ständig das Netzwerk bemühen muss, wenn ich am gleichen Rechner bleibe?
Ja, in's lokale Repo bekommt man sie sonst direkt auch über "install", dann wird nicht in's remote-Repo deployed. Ist für lokale Entwicklung oft praktischer, als jedes Mal zu deployen.
 
Hi mrBrown,

dankeschön für deine Antwort! 🙂

Jein – Maven kennt "Snapshot"-Versionen, dabei müsste jeweils die neuste geladen werden (oder zumindest regelmäßig, alternativ kann man es auch immer explizit anstoßen, das geht auch automatisch beim Build.
"Normale" Versionen muss man dagegen explizit updaten, also die Version in der build.gradle/pom.xml manuell erhöhen.

Ein generelles "immer die neuste Version" gibts aus guten Gründen nicht – es sollen ja nicht alle anderen Projekte kaputt gehen, nur weil du das eine Projekt änderst.
Ja dann wären wohl die Snapshot Versionen für meine Anwendung ein guter Weg.

Ja, in's lokale Repo bekommt man sie sonst direkt auch über "install", dann wird nicht in's remote-Repo deployed. Ist für lokale Entwicklung oft praktischer, als jedes Mal zu deployen.
Aja auch sehr interessant, danke!👍


Ok, dann komme ich jetzt mal zu dem Problem mit deploy, weswegen ich eigentlich dieses Thema erstellt habe. Falls das jetzt zu off topic ist, kann ich das auch gern noch mal in ein eigenes Thema verschieben.
Ich kriege die Authentifizierung mit deploy von meinem Windows Rechner auf den Pi nicht so wirklich hin. Aktuell kriege ich beim Aufruf des deploy Goals diese Fehlermeldung:

[CODE title="Fehlermeldung"][ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project [project name]: Failed to retrieve remote metadata [group]:[artifact]:0.0.1-SNAPSHOT/maven-metadata.xml: Could not transfer metadata [group]:[artifact]:0.0.1-SNAPSHOT/maven-metadata.xml from/to ssh-repository (scpexe://192.168.178.42/var/maven): Exit code: 255 - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[ERROR] @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
[ERROR] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[ERROR] IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
[ERROR] Someone could be eavesdropping on you right now (man-in-the-middle attack)!
[ERROR] It is also possible that a host key has just been changed.
[ERROR] The fingerprint for the RSA key sent by the remote host is
[ERROR] SHA256:dI0nLI5C3TckbWON4+EgylOXrbRsvzp/QWwP4IMhD8o.
[ERROR] Please contact your system administrator.
[ERROR] Add correct host key in [path to known_hosts on Windows computer] to get rid of this message.
[ERROR] Offending RSA key in [path to known_hosts on Windows computer]:1
[ERROR] RSA host key for 192.168.178.42 has changed and you have requested strict checking.
[ERROR] Host key verification failed.
[ERROR] Connection closed[/CODE]

Diese Fehlermeldung ist anscheinend recht bekannt; ich habe es aber trotz Internet Recherche noch nicht hingekriegt, das Problem zu lösen...😳
Habe das Schlüsselpaar mit puttygen generiert und die Schlüssel per Hand in die entsprechenden Dateien kopiert. Habe aber insgesamt wenig Überblick über diese Authentifizierung und Linux im Allgemeinen; ist also gut möglich, dass es einfach an irgendeinem dummen Anfängerfehler liegt 😀.

Im Folgenden noch wichtige Dateien, an denen es liegen könnte. Meine pom.xml sieht grob so aus:

[CODE lang="xml" title="pom.xml"]<build>
...
<extensions>
<!-- Enabling the use of SSH -->
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-beta-6</version>
</extension>
</extensions>
</build>
<distributionManagement>
<repository>
<id>ssh-repository</id>
<url>scpexe://192.168.178.42/var/maven</url>
</repository>
</distributionManagement>[/CODE]

Meine settings.xml sieht grob so aus:

[CODE lang="xml" title="settings.xml"]<settings>
<servers>
<server>
<id>ssh-repository</id>
<username>[existing user on Pi]</username>
<privateKey>[path to private key in .pkk file]</privateKey>
<configuration>
<sshExecutable>plink</sshExecutable>
<scpExecutable>sftp</scpExecutable>
<sshArgs></sshArgs>
<scpArgs>-o UserKnownHostsFile=[path to known_hosts file on Windows computer]</scpArgs>
</configuration>
</server>
</servers>
</settings>[/CODE]

Meine private key Datei ist NICHT mit einem Master Passwort (oder wie das noch mal heißt) geschützt und sieht grob so aus:

[CODE title="Private Key Datei"]
PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20210130
Public-Lines: 6
[Public key]
Private-Lines: 14
[Private key]
Private-MAC: [MAC address]
[/CODE]

Meine known_hosts Datei auf dem Windows Rechner sieht so aus:

[CODE title="known_hosts Windows Rechner"]192.168.178.42 ssh-rsa [Public key] rsa-key-20210130[/CODE]

Auf meinem Raspberry Pi liegt im Nutzerverzeichnis des betreffenden Nutzers eine Datei .ssh/authorized_keys mit folgendem Inhalt:

[CODE title="authorized_keys"]ssh-rsa [Public key] rsa-key-20210130[/CODE]

Wäre sehr freundlich, wenn mir da noch jemand weiterhelfen könnte! 🙂
 
Lösch mal die Zeile aus known_hosts raus, da brauchst du nix einzutragen. Das sollte automatisch da beim ersten Connect eingetragen werden.
 
Habe die Zeile gelöscht und es noch mal versucht. Dieses Mal kriege ich diese Fehlermeldung:

[CODE title="Neuer deploy Fehler"][ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project [project name]: Failed to retrieve remote metadata [group ID]:[artifact ID]:0.0.1-SNAPSHOT/maven-metadata.xml: Could not transfer metadata [group ID]:[artifact ID]:0.0.1-SNAPSHOT/maven-metadata.xml from/to ssh-repository (scpexe://192.168.178.42/var/maven): Exit code: 255 - Host key verification failed.
[ERROR] Connection closed
[ERROR] -> [Help 1][/CODE]

Und nun?🤯
 

Zurück
Oben