我正在尝试将构建任务添加到Maven pom文件中,以便我可以将jar文件以及一些xml文件传输到SFTP服务器(它是安装了Tomcat的VM)但我无法如此远。
我已经看了几个链接,但它们要么不符合要求,要么缺少步骤,要么不能正常工作。我基本上是Maven的初学者,所以我不确定我是否正确地做到了。
要求是我想调用Maven构建,使用主机名,用户名和密码(我已经工作)的命令行参数,然后将jar文件和xml文件上传到运行Tomcat的VM在它通过SFTP(FTP不起作用,我不认为SCP将工作,因为我没有密码)。我也不想搞乱主要的Maven settings.xml文件来添加连接细节,我找到的一些链接似乎依赖于它。
到目前为止,我使用FTP获得了以下配置文件,但由于未使用SFTP,因此无效。
<profiles>
<profile>
<!-- maven antrun:run -Pdeploy -->
<id>deploy</id>
<build>
<plugins>
<plugin>
<inherited>false</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<configuration>
<target>
<!-- <loadproperties srcFile="deploy.properties" /> -->
<ftp action="send" server="${server-url}"
remotedir="/usr/share/myappserver/webapps/myapp/WEB-INF/lib"
userid="${user-id}" password="${user-password}" depends="no"
verbose="yes" binary="yes">
<fileset dir="target">
<include name="artifact.jar" />
</fileset>
</ftp>
<ftp action="send" server="${server-url}"
remotedir="/var/lib/myappserver/myapp/spring"
userid="${user-id}" password="${user-password}" depends="no"
verbose="yes" binary="yes">
<fileset dir="src/main/resource/spring">
<include name="*.xml" />
</fileset>
</ftp>
<!-- calls deploy script -->
<!-- <sshexec host="host" trust="yes" username="usr" password="pw"
command="sh /my/script.sh" /> -->
<!-- SSH -->
<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>
<dependencies>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-commons-net</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-jsch</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>jsch</groupId>
<artifactId>jsch</artifactId>
<version>0.1.29</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
我尝试将ftp替换为sftp,并使用org.apache.tools.ant.taskdefs.optional.ssh.SFTP代替,但它似乎没有用。
总而言之,SFTP配置需要尽可能自包含在pom文件中,并在调用时传入主机URL,用户名和密码等内容。
答案 0 :(得分:1)
我使用Wagon Maven plugin及其目标upload-single
和upload
代替antrun
:
wagon:upload-single 将指定文件上传到远程位置。
旅行车:将指定的文件集上传到远程位置。
答案 1 :(得分:0)
我最终能够使用PuTTy pcsp
来解决这个问题<PUTTY_DIRECTORY>/pscp.exe" -l <USERNAME> -pw <PASSWORD> ./fileToTransfer.file <PUTTY_SESSION_ID>:/destination-directory/fileToTransfer.file
我也可以使用plink运行脚本
<PUTTY_DIRECTORY>/plink.exe" <PUTTY_SESSION> -l <USERNAME> -pw <PASSWORD> -m ./myScriptToRunRemotely.sh
它不是最干净的解决方案,但它仍允许我在Jenkins上使用它进行部署测试。