找不到 SCP 任务(ant-运行 通过 maven)
SCP task not found (ant-run through maven)
我一直在尝试将打包的 jar 部署到一些 raspberry pi 上,这些 raspberry pi 通过 maven 使用静态 ip 192.168.0.101 连接到 lan。这是我 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/components 都存在。我使用的 IDE 是 IntelliJ IDEA Ultimate。我使用来自 windows cmd 的非捆绑(通常安装)maven 版本来执行命令。
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>
已通过更改
修复
maven.plugin.classpath
到
maven.compile.classpath
我一直在尝试将打包的 jar 部署到一些 raspberry pi 上,这些 raspberry pi 通过 maven 使用静态 ip 192.168.0.101 连接到 lan。这是我 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/components 都存在。我使用的 IDE 是 IntelliJ IDEA Ultimate。我使用来自 windows cmd 的非捆绑(通常安装)maven 版本来执行命令。
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>
已通过更改
修复maven.plugin.classpath
到
maven.compile.classpath