gpt4 book ai didi

maven - Tomcat部署旧版本的webapp

转载 作者:行者123 更新时间:2023-11-28 21:48:13 29 4
gpt4 key购买 nike

这可能是重复的,因为我无法想象我们是第一个遇到它的人,但我似乎找不到它。

因此,我们使用 maven 使用 gitlab ci 将 WAR 文件部署到 tomcat 8.5 服务器。问题是当我们从 0.2.9 移动到 0.2.10 时,tomcat 弄乱了版本。显然,服务器按字母顺序部署 WAR,0.2.10 位于 0.2.1 和 0.2.2 之间,即使 0.2.10 已正确部署到服务器,运行版本仍然是 0.2.9。

完整的 webapp 名称如下所示:WebappName##0.2.10-SNAPSHOT_201901010000.war

我们考虑过将我们的版本重命名为 0.2.009 和 0.2.010,但这似乎是一个相当肮脏的变通办法。当然,旧版本会不时被删除,所以这不是一个永久性的问题,但这有点烦人,任何关于如何解决这个问题的提示都会很好。

来自 pom.xml

<version>0.2.10-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.install.skip>true</maven.install.skip>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
</properties>
[..]
<profile>
<id>deploy-stage</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<war.name>WebappName##${project.version}_${timestamp}</war.name>
<tomcat.url>http://[..]/manager/text</tomcat.url>
<tomcat.server>[..]</tomcat.server>
<tomcat.webpath>/${war.name}</tomcat.webpath>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>default-war</id>
<goals>
<goal>manifest</goal>
<goal>war</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<warName>${war.name}</warName>
<failOnMissingWebXml>true</failOnMissingWebXml>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
<forced>true</forced>
<manifest>
<addClasspath>true</addClasspath>
<packageName>true</packageName>
<useUniqueVersions>true</useUniqueVersions>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Build-Time>${maven.build.timestamp}</Build-Time>
<Archetype>${archetypeArtifactId}</Archetype>
<Archetype-Version>${archetypeVersion}</Archetype-Version>
</manifestEntries>
</archive>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>**/web.xml</include>
</includes>
</resource>
</webResources>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<warFile>${project.build.directory}/${war.name}.war</warFile>
<url>${tomcat.url}</url>
<server>${tomcat.server}</server>
<path>${tomcat.webpath}</path>
</configuration>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>

来自gitlab-ci.yml

variables:
MAVEN_OPTS: "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"

# Cache downloaded dependencies and plugins between builds.
cache:
paths:
- /root/.m2/repository/

stages:
- build
- deploy

# Run deploy
deploy:staging:
stage: deploy
script:
- 'mvn $MAVEN_CLI_OPTS -Dsonar.branch=$CI_COMMIT_REF_NAME deploy -am -P deploy-stage'
only:
- staging
image: maven:3.3.9-jdk-8

最佳答案

作为Apache Tomcat documentation说:

String comparisons are used to determine version order.

这与 Maven Artifact 版本的比较完全不同。通过字符串比较,2.0.2 的版本总是大于 2.0.10 甚至 2.0.15000 等。

我猜你的 pom.xml 中有这样的东西:

<properties>
<buildTimestamp>${maven.build.timestamp}</buildTimestamp>
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
</properties>
<build>
<finalName>${project.artifactId}##${project.version}_${maven.build.timestamp}</finalName>
</build>

您可以将其更改为:

<finalName>${project.artifactId}##${maven.build.timestamp}_${project.version}</finalName>

生成的文件名类似于 WebappName##201901010000_0.2.10-SNAPSHOT.war

这样,按时间戳的最新构建将被部署为当前事件的应用程序版本。

或者,您可以保留 .war 文件名的版本架构,而是使用 context.xml 的版本化文件名部署您的应用程序:

apache-tomcat/conf/Catalina/localhost/WebappName##201901010000.xml内容:

<Context docBase="/path/to/WebappName##0.2.10-SNAPSHOT_201901010000.war" path="/WebappName"/>

在 Apache Tomcat Manager 中,这将在应用程序版本列中显示为版本 201901010000。同样,根据时间戳的最新构建将部署为独立于 Maven 构件版本的当前事件应用程序版本,因为部署版本字符串取自 .xml 文件名而不是 .war 文件名。

关于maven - Tomcat部署旧版本的webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54251849/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com