2013-01-09 159 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>