Încerc să configurez IDE-ul Eclipse (2021-09 (4.21.0)) pe Ubuntu 20.04 pentru a depana la distanță aplicațiile java pe un RaspberryPi. Am urmat mai multe „tutoriale” (link1, link2). Cu combinația dintre ambele și căutarea intensivă a mesajelor de eroare pe web, am reușit să recreez pom.xml și build.xml
pom.xml
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org
/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pi</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>pi.hello.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="hello" default="remote-run" basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- Setup RASPBERRY PI properties -->
<property name="raspberrypi" value="192.168.4.2" />
<property name="raspberryfolder" value="~" />
<property name="username" value="pi" />
<property name="password" value="raspberry" />
<!--
<path id="maven-ant-tasks.classpath" path="${ant.libs.dir}/maven-ant-tasks-2.1.3.jar" />
<typedef
resource="org/apache/maven/artifact/ant/antlib.xml"
uri="antlib:org.apache.maven.artifact.ant"
classpathref="maven-ant-tasks.classpath" />
<path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.3.jar" />
<typedef
resource="org/apache/maven/artifact/ant/antlib.xml"
uri="antlib:org.apache.maven.artifact.ant"
classpathref="maven-ant-tasks.classpath" />
-->
<!-- Add maven install target to be run before deploy -->
<target name="maven-install">
<artifact:mvn pom="pom.xml">
<arg value="install"/>
</artifact:mvn>
</target>
<!-- Locate the prokect jar and transfer via scp to RASPBERRY PI -->
<target name="transfer" depends="maven-install">
<first id="jars">
<!--
<fileset dir="target" includes="**/*-SNAPSHOT-jar-with-dependencies.jar" />
-->
<fileset dir="target" includes="**/*.jar" />
</first>
<pathconvert pathsep="," property="jar.path" refid="jars" />
<basename file="${jar.path}" property="jar.filename" />
<echo>">>> Found application ${jar.path}"</echo>
<echo>">>> Copying application to ${raspberrypi}:${raspberryfolder}/${jar.filename}"</echo>
<scp
localfile="${jar.path}"
todir="${username}:${password}@${raspberrypi}:${raspberryfolder}"
trust="true" />
</target>
<!-- Run java -->
<target name="remote-run" depends="transfer">
<echo>">>> Starting ${raspberrypi}:${raspberryfolder}/${jar.filename}"</echo>
<sshexec
host="${raspberrypi}"
username="${username}"
password="${password}"
trust="true"
failonerror="true"
usepty="true"
command="java -jar ${jar.filename}" />
</target>
<!-- Run java in debug mode and keep waiting for execution -->
<target name="remote-debug" depends="transfer">
<echo>">>> Starting ${raspberrypi}:${raspberryfolder}/${jar.filename} in debug mode"</echo>
<sshexec
host="${raspberrypi}"
username="${username}"
password="${password}"
trust="true"
failonerror="true"
usepty="true"
command="java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=y -jar ${jar.filename}" />
</target>
</project>
Ieșirea când build.xml este compilat folosind
Run As -> Ant build
rezultă în
maven-install:
[artefact:mvn] [INFO] Se scanează pentru proiecte...
[artefact:mvn] [INFO] ------------------------------------------ -------------------------------
[artefact:mvn] [INFO] Bună clădire
[artefact:mvn] [INFO] task-segment: [instalare]
[artefact:mvn] [INFO] ------------------------------------------ -------------------------------
[artefact:mvn] [INFO] [resurse:resurse]
[artefact:mvn] [INFO] Utilizarea codificării „UTF-8” pentru a copia resursele filtrate.
[artefact:mvn] [INFO] ignoră resourceDirectory inexistent /media/stefan/DATA/Electronics/java/hello/src/main/resources
[artefact:mvn] [INFO] [compilator:compilare]
[artefact:mvn] [INFO] Nimic de compilat - toate clasele sunt actualizate
[artefact:mvn] [INFO] [resurse:testResources]
[artefact:mvn] [INFO] Utilizarea codificării „UTF-8” pentru a copia resursele filtrate.
[artefact:mvn] [INFO] ignoră resourceDirectory inexistent /media/stefan/DATA/Electronics/java/hello/src/test/resources
[artefact:mvn] [INFO] [compiler:testCompile]
[artefact:mvn] [INFO] Nimic de compilat - toate clasele sunt actualizate
[artefact:mvn] [INFO] [sigur:test]
[artefact:mvn] [INFO] Directorul raportului Surefire: /media/stefan/DATA/Electronics/java/hello/target/surefire-reports
[artefact:mvn] --------------------------------------------- ----------
[artefact:mvn] T E S T S
[artefact:mvn] --------------------------------------------- ----------
[artefact:mvn] Se rulează pi.hello.AppTest
[artefact:mvn] Teste executate: 1, Eșecuri: 0, Erori: 0, Omis: 0, Timp scurs: 0,021 sec
[artefact:mvn] Rezultate:
[artefact:mvn] Teste executate: 1, Eșecuri: 0, Erori: 0, Omis: 0
[artefact:mvn] [INFO] [jar:jar]
[artefact:mvn] [INFO] [install:install]
[artefact:mvn] [INFO] Se instalează /media/stefan/DATA/Electronics/java/hello/target/hello-0.0.1-SNAPSHOT.jar în /home/stefan/.m2/repository/pi/hello/0.0. 1-SNAPSHOT/hello-0.0.1-SNAPSHOT.jar
[artefact:mvn] [INFO] ------------------------------------------ -------------------------------
[artefact:mvn] [INFO] CONSTRUIREA SUCCES
[artefact:mvn] [INFO] ------------------------------------------ -------------------------------
[artefact:mvn] [INFO] Timp total: 1 secundă
[artefact:mvn] [INFO] Terminat la: marți, 30 nov, 17:12:36 CET 2021
[artefact:mvn] [INFO] Memorie finală: 18M/70M
[artefact:mvn] [INFO] ------------------------------------------ -------------------------------
transfer:
[echo] „>>> S-a găsit aplicația /media/stefan/DATA/Electronics/java/hello/target/hello-0.0.1-SNAPSHOT.jar”
[echo] „>>> Copierea aplicației pe 192.168.4.2:~/hello-0.0.1-SNAPSHOT.jar”
[scp] Se conectează la 192.168.4.2:22
[scp] terminat.
rulare de la distanță:
[echo] „>>> Începând cu 192.168.4.2:~/hello-0.0.1-SNAPSHOT.jar”
[sshexec] Se conectează la 192.168.4.2:22
[sshexec] cmd: java -jar hello-0.0.1-SNAPSHOT.jar
[sshexec] Bună lume!
[sshexec]
CONSTRUIREA DE SUCCES
Timp total: 6 secunde
Orice altă combinație de plugin-uri sau artefacte pentru build.xml implicit al proiectului Maven (creat prin vrăjitor) a produs o eroare din cauza versiunilor greșite în unele plugin-uri (chiar dacă versiunea corectă este instalată
Eroare la rezolvarea versiunii pentru „org.apache.maven.plugins:maven-resources-plugin”: pluginul necesită versiunea Maven 3.0
Versiune curentă
mvn -versiune
Apache Maven 3.6.3
Acasă Maven: /usr/share/maven
Versiunea Java: 11.0.11, furnizor: Ubuntu, timp de rulare: /usr/lib/jvm/java-11-openjdk-amd64
Localizare implicită: en_US, codificarea platformei: UTF-8
Numele sistemului de operare: „linux”, versiunea: „5.11.0-40-generic”, arh: „amd64”, familie: „unix”
Pentru a începe să lucrez, aș prefera să nu-mi schimb actualul build.xml.
Pentru ultimul pas în configurare, trebuie să lucrez lansatorul de la distanță. În urma tutorialelor arată fereastra de configurare
Testarea conexiunii are ca rezultat
Deoarece procesul de construire a putut să se conecteze prin ssh, să plaseze și să ruleze jar, nu știu de ce conexiunea nu poate fi stabilită. Parametrii conexiunii sunt stocați în pom.xml. Nu sunt sigur ce fac intrările din configurația de depanare. Un terminal pe RPi poate fi stabilit folosind comenzile din linia de comandă pentru conexiunea ssh (ssh pi@). Nu ar trebui să existe o problemă de acces de securitate.
- De ce are nevoie configurația de la distanță de adresa, portul când conexiunea este deja definită în pom.xml?
- Este build.xml numit chiar folosind „Debug_As->RPi_Remote” (configurația de depanare creată)?
- Cum pot apela build.xml și să permit utilizarea punctelor de întrerupere?