回答
馬庫斯力士的想法也可以應用於具有的Maven2解決方案,配置文件管理:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
</plugin>
</plugins>
...
</build>
<profiles>
<profile>
<id>env-foo1</id>
<!-- Activated when -Denv=foo1 is given as parameter. -->
<activation>
<property>
<name>env</name>
<value>foo1</value>
</property>
</activation>
<properties>
<deploy.env>xxx</deploy.env>
<tomcat.manager>http://foo1/manager</tomcat.manager>
<tomcat.manager.username>foo</tomcat.manager.username>
<tomcat.manager.password>bar</tomcat.manager.password>
</properties>
</profile>
<profile>
<id>env-foo2</id>
<!-- Activated when -Denv=foo2 is given as parameter. -->
<activation>
<property>
<name>env</name>
<value>foo2</value>
</property>
</activation>
<properties>
<deploy.env>dev</deploy.env>
<tomcat.manager>http://foo2/manager</tomcat.manager>
<tomcat.manager.username>foo</tomcat.manager.username>
<tomcat.manager.password>bar</tomcat.manager.password>
</properties>
</profile>
...
</profiles>
然後,你只需要運行X倍MVN命令,用適當的參數(-Denv = foo1,-Denv = foo2的 ...)
除此之外,您可以通過提升我們這個解決方案連續集成服務器的Hudson的Matrix功能。我對這個功能here做了簡短的解釋。
基本上,您只需在Hudson中定義一個「正常」Maven2作業,並使用Matrix功能,您可以讓Hudson多次運行此作業,每個環境一個。在別人的話,您將創建哈德遜工作,然後你的ENV參數的所有可能值定義 「環境軸」:
- foo1
- foo2的
- foo3
- .. 。
哈德森然後將建立與MVN命令和與該參數-De應用NV = foo1。一旦這個構建完成後,將建立在相同的應用程序,但與參數-Denv = foo2的,等等...
這樣,哈德森將部署在每一個環境中應用程序。 ..
我希望我的解決方案將幫助你達到你的目標......
在示例中定義的某處服務器(帶有樣品的用戶名/密碼)也許「最最小」的解決方案是不最小的。如果你在maven本身做這些事情時遇到問題,請嘗試使用ant:創建兩個不同的部署任務(每個服務器一個)以及另一個任務,將它們作爲依賴關係。有幾個例子說明如何使用ant部署到tomcat服務器。 Just google them。 做到這一點,您需要將新的ant任務整合到maven中,使用antrun插件並不困難。
果然,我希望有一個例子。 – cgp 2009-04-20 21:38:10
這個答案是Jetty和一個稍微不同的情況,但你可能會發現它有用反正。
在以前的項目中,我們使用的碼頭,所以我寫了一個簡單的碼頭部署模塊會定期掃描Maven倉庫和下載,一旦他們成爲可部署新的文物。這在一個小型的分段和開發機器上運行良好。
您可以在谷歌代碼在Polar Rose Jetty Maven Deployer項目中的代碼。
請注意,我們只能這樣做是爲了發展和分期服務器。在我看來,生產應用永遠不應該自動升級。
至於使用多個配置文件,生命週期似乎重複某些步驟 - 例如使用由變量激活的配置文件時,測試次數增加了一倍。我們發現使用catalina-ant庫會更有效;)和更「最小」的。使用「executions」元素將「運行」目標附加到生命週期階段以簡化它,或者在包後運行:mvn package antrun:run
您可能會更喜歡ant-contrib庫,並創建一個帶有服務器列表的for循環,但是這裏有一個針對2個硬編碼服務器url的靜態配置。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<configuration>
<target>
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
<deploy url="http://tc-app-01:8080/manager" username="manager" password="pass"
path="/app-path" war="file:${project.build.directory}/${project.build.finalName}.${project.packaging}" update="true"/>
<deploy url="http://tc-app-02:8080/manager" username="manager" password="pass"
path="/app-path" war="file:${project.build.directory}/${project.build.finalName}.${project.packaging}" update="true"/>
</target>
</configuration>
<dependencies>
<dependency>
<groupId>tomcat</groupId>
<artifactId>catalina-ant</artifactId>
<version>6.0.29</version>
</dependency>
</dependencies>
</plugin>
上面使用手動部署到我們的分佈式Maven倉庫卡特琳娜 - 螞蟻的特定版本,它可以在Tomcat中分佈的lib目錄中找到。
這是一個相當晚的答案一個老問題,但我敢肯定人們會感興趣。我剛剛實現了使用maven和ant任務運行多個部署。祕訣是使用macrodef(或2對我來說,因爲我熱在碼頭部署我的應用程序和需要轉移戰爭和XML文件),並使用ant屬性文件:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>install</phase>
<configuration>
<tasks>
<taskdef name="scp"
classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp"
classpath="/usr/local/java/ant/lib/ant-jsch.jar:/usr/local/java/ant/lib/jsch-0.1.45.jar" />
<macrodef name="deploy">
<attribute name="server" default="NOT SET" />
<attribute name="file" default="NOT SET" />
<attribute name="todir" default="NOT SET" />
<attribute name="port" default="NOT SET" />
<attribute name="passphrase" default="NOT SET" />
<attribute name="keyfile" default="NOT SET" />
<sequential>
<echo message="Deploying to @{server}" />
<echo message="Deploying @{file} to @{todir}" />
<scp
file="@{file}" todir="@{todir}"
port="@{port}" passphrase="@{passphrase}"
keyfile="@{keyfile}" />
</sequential>
</macrodef>
<macrodef name="deploy-app">
<attribute name="config" default="NOT SET" />
<sequential>
<property file="deploy.properties"/>
<echo message="Deploying to @{config}" />
<deploy server="${@{config}.jetty.server.host}"
file="${project.build.directory}/${project.build.finalName}.${project.packaging}"
todir="${@{config}.jetty.server.user}@${@{config}.jetty.server.host}:${@{config}.jetty.server.baseDir}/${@{config}.jetty.server.webappsDir}"
port="${@{config}.jetty.server.port}"
passphrase="${@{config}.jetty.server.passphrase}"
keyfile="/home/steff/.ssh/id_rsa"/>
<deploy server="${@{config}.jetty.server.host}"
file="${project.build.finalName}.xml"
todir="${@{config}.jetty.server.user}@${@{config}.jetty.server.host}:${@{config}.jetty.server.baseDir}/${@{config}.jetty.server.contextDir}"
port="${@{config}.jetty.server.port}"
passphrase="${@{config}.jetty.server.passphrase}"
keyfile="/home/steff/.ssh/id_rsa"/>
</sequential>
</macrodef>
<deploy-app config="home"/>
<deploy-app config="wap"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
那你的屬性文件的需要是這樣的:
home.jetty.server.user=
home.jetty.server.port=
home.jetty.server.host=
home.jetty.server.baseDir=
home.jetty.server.webappsDir=
home.jetty.server.contextDir=
home.jetty.server.passphrase=
wap.jetty.server.user=
wap.jetty.server.port=
wap.jetty.server.host=
wap.jetty.server.baseDir=
wap.jetty.server.webappsDir=
wap.jetty.server.contextDir=
wap.jetty.server.passphrase=
等等......通過
<deploy-app config="<config>"/>
訣竅使用每臺服務器配置選項的塊是使用@ {}作爲優先macrodef屬性在屬性評價$ { }在螞蟻中。
- 1. 熱部署到多個Tomcat服務器
- 2. maven部署到服務器
- 3. Maven部署到Tomcat
- 4. 將多個servlet部署到單個Tomcat服務器
- 5. 如何從Eclipse IDE部署Maven項目到Tomcat服務器
- 6. 將maven項目部署到現有的Tomcat服務器中
- 7. 部署Web應用程序到Tomcat服務器使用Maven
- 8. 使用Aptana部署到Tomcat服務器
- 9. Jenkins將插件部署到多個Tomcat服務器
- 10. 將Maven部署到遠程服務器
- 11. 部署到多個服務器
- 12. 同時部署到多個服務器
- 13. 從Maven存儲庫到部署服務器的部署
- 14. Maven + Tomcat熱部署
- 15. 哈德森部署插件 - 多個Tomcat服務器
- 16. Tomcat服務器遠程重新部署
- 17. 部署在Tomcat服務器實例
- 18. 遠程部署在tomcat 6.0.14服務器
- 19. Tomcat服務器部署失敗
- 20. 關閉Tomcat服務器部署連接
- 21. 如何通過Maven將戰爭部署到遠程Tomcat或Jetty服務器
- 22. Maven:如何將我的WAR文件部署到遠程Tomcat服務器?
- 23. maven部署到一行中的tomcat集羣(多個)
- 24. 部署多個WCF服務?
- 25. ASP.NET部署到服務器
- 26. CDbCommand部署到服務器
- 27. Apache的tomcat/maven的部署
- 28. Maven的部署多個戰爭到嵌入式服務器集成測試
- 29. 將maven項目部署到tomcat
- 30. 通過Maven部署Solr到Tomcat
哇靠,這是潛在的巨大有用的,因爲哈德森正是我在.... – cgp 2009-04-21 16:01:09
有趣的是,這是類似於我給的鏈接是在暗示用這個目標,但它不是準確清晰。迫不及待地嘗試。 – cgp 2009-04-21 16:02:54
有沒有辦法做到這一點,而不必調用Maven X次?在我看來,再次構建僅僅是部署是耗時的,而且如果在這些構建過程中發生了一些新的更改提交給代碼,它可能會導致在集羣中無法部署 – maverick 2012-08-01 20:11:38