2011-08-15 35 views
21

「安裝」目標將工件複製到目標目錄和本地存儲庫。Maven:如何將工件複製到特定目錄?

我該如何告訴Maven將也複製到給定目錄(例如JBoss的deploy目錄)。

+3

對於JBoss有沒有必要*文件複製到部署目錄* - 有一個[特別Maven插件(HTTP:/ /mojo.codehaus.org/jboss-maven-plugin/deploy-mojo.html)。 –

+1

然而,jboss「特殊的maven插件」的可靠性有點令人質疑。 –

回答

16

Maven的依賴,插件的目標copy你想要做什麼,看到example

但是,在目標目錄之外複製任何內容不是一個好主意(尤其是如果這樣的動作附加到構建階段),因爲它會引入構建的意想不到的副作用,有時甚至喪失重現性。

作爲@Andreas_D指出,JBoss部署的目的有更好的選擇;同樣適用於部署到其他應用程序。

8

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

   <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配置文件:

<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> 
+0

這相當於到JBoss,Maven插件 – Tristan

2

最好的方法是使用一個實際部署你的應用程序的插件,如cargojboss-maven plugin(授予@Andreas_D那個)。

這是使用複製或通用上傳工具的更好方法,因爲部署是您實際嘗試執行的操作。

使用貨物插件,您可以選擇deploy to a variety of running servers。我們採用這種方法在構建期間使用jetty plugin在碼頭本地進行測試,並通過貨物按需部署到tomcat。

注意:如果您的目標服務器(JBOSS)本地安裝在開發箱上,那麼您也可以在構建過程中使用貨物來啓動/停止服務器。這種方法的缺點是你需要它在pom文件中引用它的位置,所以所有的開發人員都會將它安裝在相同的位置或者定義它所在位置的系統屬性(類似於JAVA_HOME)。

+0

的硬部署目標,我downvoted這個答案,因爲它沒有回答的OP,這是如何複製文物的具體問題。 OP沒有要求替代品。 –

9

根據http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html可以在剛建神器複製到指定目錄:

<project> 
    [...] 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.8</version> 
      <executions> 
      <execution> 
       <id>copy-installed</id> 
       <phase>install</phase> 
       <goals> 
       <goal>copy</goal> 
       </goals> 
       <configuration> 
       <artifactItems> 
        <artifactItem> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>${project.artifactId}</artifactId> 
        <version>${project.version}</version> 
        <type>${project.packaging}</type> 
        </artifactItem> 
       </artifactItems> 
       <outputDirectory>some-other-place</outputDirectory> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    [...] 
    </project> 
相關問題