【问题标题】:SCP task not found (ant-run through maven)找不到 SCP 任务(通过 maven 运行蚂蚁)
【发布时间】:2017-01-21 15:20:25
【问题描述】:

我一直在尝试将打包的 jar 部署到一些通过 maven 连接到 LAN 的树莓派上,静态 IP 为 192.168.0.101。这是我的 pom.xml 的重要部分:

<dependencies>
... SNIP ...
        <!-- SSH & FTP -->
    <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant-commons-net</artifactId>
        <version>1.10.0</version>
    </dependency>
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.54</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant-jsch</artifactId>
        <version>1.10.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>

            <executions>
                <execution>
                    <id>scp-to-remote</id>
                    <phase>install</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>

                            <!-- Upload jar via ftp to /home/pi/server -->
                            <scp localFile="${project.basedir}/target/button-masher-1.0.jar"
                                 remoteToFile="${rserver.user}@${rserver.ip}:${rserver.script.server.dir}" verbose="true"
                                 password="${rserver.pass}" trust="true">
                            </scp>

                            <!-- calls deploy script -->
                            <sshexec host="${rserver.ip}" trust="yes"
                                     username="${rserver.user}" password="${rserver.pass}"
                                     command="sh ${rserver.script.server.startup}" />

                            <taskdef name="scp"
                                     classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp"
                                     classpathref="maven.plugin.classpath" />

                            <taskdef name="sshexec"
                                     classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec"
                                     classpathref="maven.plugin.classpath" />

                            <taskdef name="ftp"
                                     classname="org.apache.tools.ant.taskdefs.optional.net.FTP"
                                     classpathref="maven.plugin.classpath" />

                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这是显示在 %ANT_HOME%/lib 上存在 jsch.jar 和 jsch-ant.jar 的图片(jsch 是最新版本): ant_home/lib

每当我运行 maven install (-Dmaven.test.skip=true) 时,我都会收到此错误: error

但所有需要的 ant 可选 jars/组件都存在。我使用的 IDE 是 IntelliJ IDEA Ultimate。我使用 windows cmd 中的非捆绑(通常安装)maven 版本来执行命令。

【问题讨论】:

  • 首先我会说这不是 Maven 的工作,但如果你真的喜欢通过 wagon-maven-plugin...

标签: java maven intellij-idea ant maven-antrun-plugin


【解决方案1】:

通过修改修复

maven.plugin.classpath

maven.compile.classpath

【讨论】:

    【解决方案2】:

    wagon-maven-plugin 可能是此类事情的正确选择...

    你可以像这样在你的 pom 文件中配置它:

    <project>
      [...]
      <build>
        [...]
        <extensions>
          <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.10</version>
          </extension>
        </extensions>
    
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>wagon-maven-plugin</artifactId>
          <version>1.0</version>
          <executions>
            <execution>
              <id>upload-javadoc</id>
              <phase>deploy</phase>
              <goals>
                <goal>upload</goal>
              </goals>
              <configuration>
                <fromDir>local.dir</fromDir>
                <includes>*</include>
                <excludes>pom.xml</excludes>
                <url>scp://your.remote.host/</url>
                <toDir>remote.dir</toDir>
              </configuration>
              </execution>
            </executions>
            </plugin>
        </build>
        [...]
    </project>
    

    我建议通过 Docker 镜像或使用 Ansible 之类的东西来配置您的系统。

    增强:

    执行命令可以使用这个来完成:

    <project>
      [...]
      <build>
        <extensions>
          <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-webdav</artifactId>
            <version>2.8</version>
          </extension>
        </extensions>
    
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>wagon-maven-plugin</artifactId>
          <version>1.0</version>
          <executions>
            <execution>
              <id>execute-test-commands</id>
              <phase>deploy</phase>
              <goals>
                <goal>sshexec</goal>
              </goals>
              <configuration>
                <serverId>atlassian-public</serverId>
                <url>scp://maven.atlassian.com/public</url>
                <commands>
                  <command>/usr/share/tomcat/bin/tomcat stop</command>
                  <command>rm -rf /usr/share/tomcat/webapps/ROOT</command>
                  <command>unzip -o /usr/share/tomcat/webapps/myapp.zip -d /usr/share/tomcat/webapps/</command>
                  <command>/usr/share/tomcat/bin/tomcat start</command>
                </commands>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </build>
      [...]
    </project>
    

    【讨论】:

    • docker 不能很好地处理 DeviceManager 和 GPIO 引脚 :) 。您也没有为我提供 ssh-ing 到服务器并在那里运行一些脚本的替代方法。
    • 看来您没有阅读 wagon-maven-plugin 的文档。我更新了答案...(除了 Docker 非常适合 Raspberry PI)。
    • 是的,但它不适用于 GPIO PINS 吗?我还要求 ant-run 不是别的东西
    • 如果你不喜欢我会建议使用我提供的解决方案好吧,这取决于你......
    猜你喜欢
    • 2015-05-30
    • 2018-12-01
    • 1970-01-01
    • 2012-10-09
    • 2011-04-17
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多