2015-09-11 106 views
1

我試圖將一個構建任務添加到Maven POM文件中,以便我可以將一個jar文件以及一些xml文件傳輸到SFTP服務器(它是安裝了Tomcat的VM),但到目前爲止,我一直無法工作。使用Maven通過SFTP傳輸工件

我看了幾個鏈接,但他們要麼不符合要求,要麼缺少步驟,要麼不工作。我基本上是Maven的初學者,所以我不確定我是否正確地做。

需求是,我想調用一個Maven構建,命令行參數爲主機名,用戶名和密碼(我有工作),然後將jar文件和xml文件上傳到一個虛擬機與Tomcat通過SFTP運行(FTP不起作用,我不認爲SCP會工作,因爲我沒有passfile)。我也不想混淆主要的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

我最終能夠用得到這個工作使用PCSP膩子

<PUTTY_DIRECTORY>/pscp.exe" -l <USERNAME> -pw <PASSWORD> ./fileToTransfer.file <PUTTY_SESSION_ID>:/destination-directory/fileToTransfer.file 

我還可以運行腳本砰砰

<PUTTY_DIRECTORY>/plink.exe" <PUTTY_SESSION> -l <USERNAME> -pw <PASSWORD> -m ./myScriptToRunRemotely.sh 

這不是最乾淨的解決方案,但它仍然允許我在Jenkins上使用它進行部署測試。

0

我會用Wagon Maven plugin其目標upload-singleupload代替antrun

  • 旅行車:上傳單上傳指定文件到遠程位置。

  • 無蓋貨車:上傳上傳文件指定的文件集到遠程位置。

+0

這似乎需要使用settings.xml,我不想使用它,因爲它需要其他開發人員更改它們的設置,而要求是將server-url/username/password作爲參數傳遞給Maven構建。 – matthewh86

+0

@ matthewh86我知道將構件部署到Tomcat實例的情況,但我們通過Jenkins作業(取決於在其之前運行的構件的構建和測試作業的構建成功)來自動化它,所以適當的'settings.xml'位於Jenkins服務器上。在描述的情況下,開發人員可以將工件部署到未通過集成測試的Tomcat。這是真的嗎? –

+0

要部署的構件需要單獨測試(使用它們自己的單元測試和maven構建),但還需要單獨部署到tomcat虛擬機,以便可以更快地集成測試它們,而不需要使用更新來重建虛擬機可能需要一個小時或更多的罐子。 編輯:我也可能誤解部署的使用。我認爲它需要更多地作爲可選的上傳目標,而不是發佈和發佈工件本身。 – matthewh86