2013-01-09 160 views
1

我們使用jboss 7和jboss-as-maven-plugin自動部署我們的戰爭文件。我們有一個web.xml,其contextRoot被設置爲我們的應用程序名稱。在插件中,我們將fileName配置爲$ {project.build.finalName}。$ {project.packaging}。它部署得很好,但問題在於當我們更改我們的版本號時,我們的戰爭文件名稱會發生​​變化。jboss 7部署問題與戰爭

例如,當我們準備發佈我們的下一個版本時,戰爭從myproject-v1.0.1.war更改爲myproject-v1.0.2.war。問題是當maven jboss插件運行並嘗試部署war文件時。注意我們已將force設置爲true,因此它應該取消部署舊應用程序並部署新應用程序。

問題是,在確定應用程序當前是否部署時,似乎要關閉war文件名而不是webContext。所以新版本無法部署,因爲舊版本仍在運行。我們必須進入並手動取消部署以前的版本,然後再重新開發。看起來,舊應用程序的部署力量基於戰爭名稱,並且由於版本號更改,它不認爲其已部署並且保留舊版本運行。這導致它失敗,因爲webContext已被使用。

我們嘗試將插件中的配置更改爲通用配置,並且該配置有效(運行時名稱和名稱顯示此名稱,不再是戰爭文件名)。但唯一的問題是,似乎影響了jboss上的某些東西,儘管它說它已部署了webContext,但無法訪問我們的應用程序。這是奇怪的,因爲webContext設置在web.xml中,但似乎插件中的配置有些如何打破它。

回答

0

您可以定義一個name配置屬性。這應該覆蓋部署名稱。如果沒有設置,它會使用文件的名稱。

<project> 
    ... 
    <build> 
     ... 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.jboss.as.plugins</groupId> 
       <artifactId>jboss-as-maven-plugin</artifactId> 
       <version>7.3.Final</version> 
       <configuration> 
        <name>your-app</name> 
       </configuration> 
      </plugin> 
      ... 
     </plugins> 
     ... 
    </build> 
... 
</project> 
+0

是的,我已經試過了,它部署,但它改變了雙方的運行時名稱和姓名,以新的名稱。我可以看到它與我在jboss控制檯中設置的一起部署,控制檯說它正在運行。問題是即使jboss現在說它已經部署了它,它也沒有註冊webContext,而且我無法再通過使用webContext的瀏覽器訪問應用程序。它在jboss-web.xml文件中設置。如果我從配置中刪除字段,它將使用war文件名稱進行部署,我可以訪問它。我在日誌中沒有看到任何錯誤。我會grep日誌。 – codemonkeyww

+0

我看到,當沒有配置控制檯出說,它正確地註冊webContext和一切正常。我使用相同的war文件,但現在我在config部分中添加,它使用此名稱部署它,但日誌從不顯示webContext已配置。它就像由於某種原因正在搞亂webContext。 – codemonkeyww

+0

這很奇怪。您是否使用最新版本的插件7.3.Final?它可能不會真的有所作爲,但也許。我明天也會去看看。 –

0

因此,在玩了一段時間之後,我們找不到任何理由爲什麼當我們使用配置時,它會部署但webContext沒有設置。但是當我們手動部署相同的WAR時,它會設置webContext。

所以最後。我們最終做的是將戰爭的名稱改爲通用名稱。所以,而不是myapp_v_1_0_1.war,我們做了myapp.war。這是一個痛苦,因爲現在我們不知道只通過查看控制檯就可以部署哪個版本。我們需要點擊顯示版本號的應用程序。但通過這樣做,它解決了我們的問題,即取消部署舊應用程序,但創建了一個新問題,其中不容易確定通過控制檯部署的版本。

+0

您可以做的一個選擇是保留版本,爲舊版本添加一個取消部署目標。我意識到這不太理想,但你至少可以保留版本號。 –

+0

是的,儘管如此,但我們需要跟蹤以前的版本,這也是一種痛苦。但是,如果我們這樣做也會有效。 – codemonkeyww

+0

我繼續爲它創建一個JIRA https://issues.jboss.org/browse/JBASMP-32我會盡力在這裏看看它。 –

0

本文似乎回答你的問題。 https://community.jboss.org/wiki/HowdoIoverridethewebcontextroot

我在我自己的項目上嘗試過它,它的工作原理!基本上,創建一個jboss-web.xml(現在你的項目是特定的,一旦在任何地方部署,就寫這麼多)。使jboss-web.xml看起來像...

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-web> 
    <context-root>/rmbMavenCounter</context-root> 
</jboss-web> 

從jboss-as-plugin的pom.xml中刪除配置。我的插件現在看起來

<build> 
    <plugins> 
        ..... 
     <plugin> 
      <groupId>org.jboss.as.plugins</groupId> 
      <artifactId>jboss-as-maven-plugin</artifactId> 
      <version>7.4.Final</version> 
     </plugin> 
    </plugins> 
</build> 

它將與在JBoss管理控制檯快照名稱部署,但您可以使用文本字符串來訪問你的應用程序。例如,我使用以下鏈接訪問上述應用程序。

http://localhost:8080/rmbMavenCounter/ 

這是從我的jboss web服務器控制檯的部署...

08:12:42,413 INFO [org.jboss.as.server.deployment] (MSC service thread 1-16) JBAS015876: Starting deployment of "mavenCounter2-0.0.1-SNAPSHOT.war" 
08:12:42,606 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Initializing Mojarra 2.1.5 (SNAPSHOT 20111202) for context '/rmbMavenCounter' 
08:12:42,663 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Monitoring jndi:/default-host/rmbMavenCounter/WEB-INF/faces-config.xml for modifications 
08:12:42,665 INFO [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /rmbMavenCounter 
08:12:42,678 INFO [org.jboss.as.server] (management-handler-threads - 30) JBAS018559: Deployed "mavenCounter2-0.0.1-SNAPSHOT.war" 
0

同樣的問題,我面對:我想使用的版本上傳戰爭和內部版本號,便於識別,但在同一時間覆蓋基於它的名字以前的服務(不帶版本/版本號)。

這似乎是maven Jboss插件的限制:http://docs.jboss.org/jbossas/7/plugins/maven/latest/deploy-mojo.html。目前只支持'name'參數,它會覆蓋JBoss管理控制檯中的Name和Runtime Name。

  1. 我會說長期插件需要支持'runtimeName'以及Maven的'部署'目標參數列表中。

  2. 儘管如此,您可以使用'undeploy'目標先取消部署服務,並使用'matchPattern'參數來查找以前的服務,即使它包含版本/內部版本名稱。

當然,缺點是你必須取消部署;這不太適合生產環境。

爲您例如:

<plugin> 
    <groupId>org.jboss.as.plugins</groupId> 
    <artifactId>jboss-as-maven-plugin</artifactId> 
    <configuration> 
    <port>${JBOSS_PORT}</port> 
    <username>${JBOSS_USERNAME}</username> 
    <password>${JBOSS_PASSWORD}</password> 
    <force>true</force> 
    <ignoreMissingDeployment>true</ignoreMissingDeployment> 
    </configuration> 
    <executions> 
    <execution> 
     <id>undeploy-MyProject</id> 
     <phase>install</phase> 
     <goals> 
     <goal>undeploy</goal> 
     </goals> 
     <configuration> 
     <hostname>${HOSTNAME}</hostname> 
     <matchPattern>myproject.*\.war</matchPattern> 
     </configuration> 
    </execution> 
    <execution> 
     <id>deploy-MyProject</id> 
     <phase>install</phase> 
     <goals> 
     <goal>deploy</goal> 
     </goals> 
     <configuration> 
     <hostname>${HOSTNAME}</hostname> 
     <name>myproject-${project.version}.war</name> 
     <filename>target/myproject-${project.version}.war</filename> 
     </configuration> 
    </execution> 
    </executions> 
</plugin>