Рейтинг:1

Удаленная отладка проекта java maven на Raspberry Pi с использованием Eclipse IDE: ошибка рукопожатия

флаг cn

Я пытаюсь настроить Eclipse IDE (2021-09 (4.21.0)) на Ubuntu 20.04 для удаленной отладки Java-приложений на RaspberryPi. Я следовал нескольким «учебникам» (ссылка1, ссылка2). Благодаря сочетанию обоих и интенсивного поиска сообщений об ошибках в Интернете я смог воссоздать pom.xml и build.xml.

пом.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>

Вывод при компиляции build.xml с использованием

Запуск от имени -> Сборка Ant

приводит к

maven-установить:
[artifact:mvn] [INFO] Сканирование проектов...
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[artifact:mvn] [INFO] Здравствуй, строй
[артефакт: mvn] [INFO] задача-сегмент: [установить]
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[артефакт: mvn] [ИНФОРМАЦИЯ] [ресурсы: ресурсы]
[artifact:mvn] [INFO] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов.
[артефакт: mvn] [INFO] пропустить несуществующий каталог ресурсов /media/stefan/DATA/Electronics/java/hello/src/main/resources
[артефакт: mvn] [ИНФОРМАЦИЯ] [компилятор: компиляция]
[artifact:mvn] [INFO] Нечего компилировать — все классы обновлены
[артефакт: mvn] [ИНФОРМАЦИЯ] [ресурсы: testResources]
[artifact:mvn] [INFO] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов.
[артефакт: mvn] [INFO] пропустить несуществующий каталог ресурсов /media/stefan/DATA/Electronics/java/hello/src/test/resources
[артефакт: mvn] [ИНФОРМАЦИЯ] [компилятор: testCompile]
[artifact:mvn] [INFO] Нечего компилировать — все классы обновлены
[артефакт: mvn] [ИНФОРМАЦИЯ] [верный огонь: тест]
[артефакт: mvn] [INFO] Каталог отчетов Surefire: /media/stefan/DATA/Electronics/java/hello/target/surefire-reports
[артефакт: mvn] --------------------------------------------- ----------
[артефакт: mvn] Т Е С Т С
[артефакт: mvn] --------------------------------------------- ----------
[артефакт: mvn] Запуск pi.hello.AppTest
[artifact:mvn] Запуск тестов: 1, сбоев: 0, ошибок: 0, пропущено: 0, истекшее время: 0,021 сек.
[артефакт: mvn] Результаты:
[artifact:mvn] Запущено тестов: 1, сбоев: 0, ошибок: 0, пропущено: 0
[артефакт: mvn] [ИНФОРМАЦИЯ] [банка: банка]
[артефакт: mvn] [ИНФОРМАЦИЯ] [установить: установить]
[artifact:mvn] [INFO] Установка /media/stefan/DATA/Electronics/java/hello/target/hello-0.0.1-SNAPSHOT.jar в /home/stefan/.m2/repository/pi/hello/0.0. 1-SNAPSHOT/hello-0.0.1-SNAPSHOT.jar
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[artifact:mvn] [INFO] УСПЕШНАЯ СБОРКА
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[artifact:mvn] [INFO] Общее время: 1 секунда
[artifact:mvn] [INFO] Завершено: вторник, 30 ноября, 17:12:36 CET 2021 г.
[артефакт: mvn] [ИНФОРМАЦИЯ] Окончательная память: 18M/70M
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
перевод:
     [echo] ">>> Найдено приложение /media/stefan/DATA/Electronics/java/hello/target/hello-0.0.1-SNAPSHOT.jar"
     [echo] ">>> Копирование приложения на 192.168.4.2:~/hello-0.0.1-SNAPSHOT.jar"
      [scp] Подключение к 192.168.4.2:22
      [scp] сделано.
удаленный запуск:
     [echo] ">>> Начиная с 192.168.4.2:~/hello-0.0.1-SNAPSHOT.jar"
  [sshexec] Подключение к 192.168.4.2:22
  [sshexec] cmd: java -jar привет-0.0.1-SNAPSHOT.jar
  [sshexec] Привет, мир!
  [sshexec] 
ПОСТРОИТЬ УСПЕШНО
Общее время: 6 секунд

Любая другая комбинация плагинов или артефактов для файла build.xml по умолчанию проекта maven (созданного с помощью мастера) вызывала ошибку из-за неправильных версий в некоторых плагинах (даже если установлена ​​правильная версия).

Ошибка разрешения версии для «org.apache.maven.plugins: maven-resources-plugin»: для плагина требуется Maven версии 3.0

текущая версия

mvn -версия
Апач Мавен 3.6.3
Главная страница Maven: /usr/share/maven
Версия Java: 11.0.11, производитель: Ubuntu, среда выполнения: /usr/lib/jvm/java-11-openjdk-amd64
Язык по умолчанию: en_US, кодировка платформы: UTF-8.
Название ОС: «linux», версия: «5.11.0-40-generic», архитектура: «amd64», семейство: «unix»

Чтобы начать работать, я бы предпочел не менять свой текущий build.xml.

Для последнего шага в настройке мне нужно, чтобы удаленный лаунчер работал. Следуя инструкциям, окно конфигурации выглядит так: debug_config

Тестирование соединения приводит к

error_vm

Так как в процессе сборки удалось подключиться по ssh, поставить и запустить банку не знаю почему не может установиться соединение. Параметр для соединения хранится в pom.xml. Я не уверен, что делают записи в конфигурации отладки. Терминал на RPi можно установить с помощью команд командной строки для ssh-соединения (ssh pi@). Не должно быть проблем с безопасным доступом.

  1. Зачем удаленной конфигурации нужен адрес, порт, когда соединение уже определено в pom.xml?
  2. Вызывается ли даже build.xml с использованием «Debug_As->RPi_Remote» (созданная конфигурация отладки)?
  3. Как я могу вызвать build.xml и включить использование точек останова?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.