Puncte:1

Depanarea de la distanță a proiectului Java Maven pe Raspberry Pi folosind Eclipse IDE: eroare de strângere de mână

drapel cn

Î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 debug_config

Testarea conexiunii are ca rezultat

error_vm

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.

  1. De ce are nevoie configurația de la distanță de adresa, portul când conexiunea este deja definită în pom.xml?
  2. Este build.xml numit chiar folosind „Debug_As->RPi_Remote” (configurația de depanare creată)?
  3. Cum pot apela build.xml și să permit utilizarea punctelor de întrerupere?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.