2011-06-09 31 views
4

摘要:如何使用Maven將一些生成的文件複製到Web服務器(例如IIS或Apache)目錄中?在Maven中,如何使用無人機插件複製文件?

詳細信息: 我有一個在Maven中構建的工作應用程序。我設法使用webstart-maven-plugin來構建它,它在目錄target/jnlp中生成所有需要的文件(.jar和.jnlp)。它還創建了一個zip文件,其全部位於target/foo-1.0.zip

目前webstart插件沒有deploy目標 - 請求已經結束於FAQ (question 3)。它可能會在未來實施,但目前的建議是使用wagon-maven-plugin

我從來沒有使用過貨車。首先,我想將文件複製到由Web服務器提供的本地目錄中。後來我想遠程複製它們,可能使用ftp。有人可以舉一個例子來說明我需要添加到pom.xml以獲得本地副本的工作方式(希望是ftp的例子嗎?)。我無法在文檔中找到它。從閱讀我想我可能也需要Wagon Maven File Provider,但因爲這似乎幾乎沒有文件,我不知道。

回答

6

旅行車供應商只在那裏提供額外的網絡協議支持(如FTP)。

如果你要的文件複製到網絡服務器(局部或遠處),你可以使用Maven上傳插件:

... 
<plugin> 
    <groupId>com.atlassian.maven.plugins</groupId> 
    <artifactId>maven-upload-plugin</artifactId> 
</plugin> 
... 

在父POM:

  <plugin> 
       <groupId>com.atlassian.maven.plugins</groupId> 
       <artifactId>maven-upload-plugin</artifactId> 
       <version>1.1</version> 
       <configuration> 
        <resourceSrc> 
         ${project.build.directory}/${project.build.finalName}.${project.packaging} 
        </resourceSrc> 
        <resourceDest>${jboss.deployDir}</resourceDest> 
        <serverId>${jboss.host}</serverId> 
        <url>${jboss.deployUrl}</url> 
       </configuration> 
      </plugin> 

而在智能配置參數方式,我使用maven配置文件(在父pom):

<profiles> 
    <!-- local deployment --> 
    <profile> 
     <id>developpement</id> 
     <properties> 
      <jboss.host>localhost</jboss.host> 
      <jboss.deployDir>appli/jboss-4.0.4.GA/server/default/deploy/</jboss.deployDir> 
      <jboss.deployUrl>file://C:/</jboss.deployUrl> 
     </properties> 
    </profile> 
    <!-- distant deployment --> 
    <profile> 
     <id>validation</id> 
     <properties> 
      <jboss.host>ENV_val</jboss.host> 
      <jboss.deployDir>/home/envval/jboss/server/default/deploy/</jboss.deployDir> 
      <jboss.deployUrl>scp://PROJECT_LAN_HOST</jboss.deployUrl> 
     </properties> 
    </profile> 
</profiles> 

我創建了一個「螞蟻發射器」,使用它通過在Eclipse的Ant視圖點擊:

<target name="copy war to JBoss local" description="Copy war to local JBoss"> 
    <maven goal="upload:upload" options="-Pdeveloppement" /> 
</target> 

但你完全可以在命令行中運行:

mvn upload:upload -Pdeveloppement 

編輯:順便說一下,對於遙遠的部署,您可能需要登錄密碼爲scp工作。你必須將它們添加到您的Maven settings.xml文件:

<settings> 
    ... 
    <servers> 
    <server> 
     <id>ENV_val</id> 
     <username>login</username> 
     <password>password</password> 
    </server> 
    </servers> 
    ... 
</settings> 

編輯:你需要添加Atlassian的庫:

<pluginRepositories> 
    <pluginRepository> 
     <id>Atlassian</id> 
     <url>https://maven.atlassian.com/repository/public</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </pluginRepository> 
</pluginRepositories> 

編輯:根據upong遠程協議您必須添加貨車擴展程序,請參閱Uploading a directory using sftp with Maven

+0

嗨,你可以擴展你的答案顯示副本到本地服務器?該文檔對上傳插件來說似乎也不是很好。 – 2011-06-09 11:39:40

+1

當然,在那裏看看。 – Tristan 2011-06-09 11:52:38

3

最後,我沒有使用Maven上傳插件 - 它似乎有點有限,並且不是主要Maven發行版的一部分。建議使用maven wagon插件。這是我可以做到的最簡單的pom。希望別人會發現它很有用,因爲我找不到任何相似的東西。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>wagon-maven-plugin</artifactId> 
    <version>1.0-beta-3</version> 
    <configuration> 
     <fromDir>${project.build.directory}/jnlp</fromDir> 
     <includes>*</includes> 
     <url>file://c:/inetpub/wwwroot</url> 
     <toDir>jnlp</toDir> 
    </configuration> 
    </plugin> 

對於遠程分佈,您只需更改URL類型,並根據需要添加貨車擴展。

+0

您不應該使用wagon-maven-plugin來執行此操作(請參閱http://stackoverflow.com/questions/5493522/problem-uploading-with-maven-wagon-plugin)。也沒有馬車maven插件或maven上傳插件來自org.apache.maven,他們來自org.codehaus.mojo和com.atlassian.maven.plugins – Tristan 2011-06-09 16:59:19

+0

感謝您的信息 - 感覺很奇怪。我現在可能會堅持下去,但我想現在我寧願依賴codehaus而不是atlassian。我會繼續尋找更好的解決方案 – 2011-06-10 09:32:20

+0

@Tristan,codehaus和maven是好朋友;)。 – 2015-12-15 22:17:00