maven deploy configuration

本文介绍如何配置Maven项目的pom.xml文件以使用Archiva作为仓库,并提供了一个用于从该仓库部署应用程序包的bash脚本示例。

in pom.xml, the config will be below:

<repositories>
		<repository>
			<id>com.nomura.xxx</id>
			<url>http://XXXXXXX:8080/archiva/repository</url>
		</repository>
	</repositories>



	
	<distributionManagement>
		<repository>
			<id>XXXX.release</id>
			<name>xxxxRelease Repository</name>
			<url>http://XXXXX/archiva/repository/release/</url>
		</repository>
		<snapshotRepository>
			<id>XXXXX.snapshot</id>
			<name>Internal Snapshot Repository</name>
			<url>http://XXXXX/archiva/repository/snapshot/</url>
		</snapshotRepository>
	</distributionManagement>

 

In the app workspace, you can input the command:

mvn deploy

 

to deploy the app into the share server.

 

And in the server that run the app, you can run below script to get app package.
deploy APPNAME VERSION

 

the scripts content will be :

 

#!/bin/bash

set -e
set -u

OUR_HOME="`dirname "$0"`/"

REPO_ROOT="http://XXXXX/archiva/repository/"

COMPONENT="$1"
VERSION="$2"


echo "Using REPO_PREFIX: $REPO_PREFIX"

INSTALL_ROOT="${HOME}"
INSTALL_COMPONENT_ROOT="${INSTALL_ROOT}/${COMPONENT}"

mkdir -p "${INSTALL_COMPONENT_ROOT}"

TMP_DIR=/tmp/VenomComponentZip/${COMPONENT}-`date -u "+%Y-%m-%d-%H:%M:%S.%N"`
mkdir -p $TMP_DIR


########################################
# Special handling for TomCat Components
########################################
if [ ${COMPONENT} == "FXAllocationsUI" -o ${COMPONENT} == "TraderClientPnL" ] ; then

    wget -nv -P ${INSTALL_COMPONENT_ROOT} "${REPO_ROOT}/${REPO_PREFIX}/${COMPONENT}/${VERSION}/${COMPONENT}-${VERSION}.war"
    pushd $INSTALL_COMPONENT_ROOT
    rm -f ${COMPONENT}.war
    ln -s ${COMPONENT}-${VERSION}.war ${COMPONENT}.war

    rm -rf $TMP_DIR

    exit
fi


##################################
# Special handling foHome
##################################
if [[ ${COMPONENT} == "xxxHome" ]]
    then
    #Special handling for xxxHome which is not a Java component
    case $USER in
    eufxcdev)
        ENVIRONMENT=dev
        ENVIRONMENT_NAME=test.ln;;
    eufxcstg)
        ENVIRONMENT=stage
        ENVIRONMENT_NAME=stage.ln;;
    eufxcprd)
        ENVIRONMENT=prod
        ENVIRONMENT_NAME=prod.ln;;
    *)
        echo "Error calculating environment based on current user $USER"
        EXIT 3
    esac

    xxxHOME_ZIP_FILENAME=${COMPONENT}-${VERSION}-${ENVIRONMENT}.zip

    wget -nv -P $TMP_DIR "${REPO_ROOT}/${REPO_PREFIX}/${COMPONENT}/${VERSION}/${xxxHOME_ZIP_FILENAME}"

    unzip -d $TMP_DIR $TMP_DIR/$xxxHOME_ZIP_FILENAME "xxxHome/$ENVIRONMENT_NAME/*"

    TARGET_DIRECTORY=$INSTALL_COMPONENT_ROOT/${ENVIRONMENT_NAME}-$VERSION

    if [ -e "$TARGET_DIRECTORY" ] ; then
        echo "xxxHome version is already deployed. Delete it if you want a redeploy: $TARGET_DIRECTORY"
        echo "Please manually remove the soft link from the home directory and point to the required version."
        exit 26
    fi

    mv $TMP_DIR/xxxHome/$ENVIRONMENT_NAME $TARGET_DIRECTORY

    if [[ $ENVIRONMENT == "dev" ]]
    then
        echo "Not setting soft link $ENVIRONMENT_NAME. In the development environment, xxxHome is taken from SVN"
    else
        echo "Deleting and recreating soft link: $ENVIRONMENT_NAME"
        pushd $INSTALL_COMPONENT_ROOT
        rm -f ${ENVIRONMENT_NAME}
        ln -s ${ENVIRONMENT_NAME}-$VERSION ${ENVIRONMENT_NAME}
    fi

    rm -rf $TMP_DIR

    exit #Finished processing for xxxHome
fi
########################################
# END - Special handling for xxxHome
########################################


wget -nv -P $TMP_DIR "${REPO_ROOT}/${REPO_PREFIX}/${COMPONENT}/${VERSION}/${COMPONENT}-${VERSION}-Server.zip"

unzip "$TMP_DIR/${COMPONENT}-${VERSION}-Server.zip" -d "${INSTALL_COMPONENT_ROOT}"
$OUR_HOME/moveJarsToShared ${INSTALL_COMPONENT_ROOT}/${COMPONENT}-${VERSION}/lib ${COMPONENT}-${VERSION}

if [ $? -eq 0 ] ; then
    function noSelector {
        echo "No Selector zip for this project"
        NO_SELECTOR=true
    }
    #Don't fail and exit the script if we get a 404 on the file. It's a valid condition to have no selector zip.
    NO_SELECTOR=false
    wget -nv -q -P $TMP_DIR "${REPO_ROOT}/${REPO_PREFIX}/${COMPONENT}/${VERSION}/${COMPONENT}-${VERSION}-Selector.zip" || noSelector

    if [ $NO_SELECTOR == false ] ; then
        echo "Selector zip is present"
        unzip "$TMP_DIR/${COMPONENT}-${VERSION}-Selector.zip" -d "${INSTALL_COMPONENT_ROOT}"
    fi

    echo "Creating soft link called live pointing to the newly deployed version"
    pushd ${INSTALL_COMPONENT_ROOT}
    rm -f live
    ln -s ${COMPONENT}-$VERSION live
    popd
fi

rm -rf $TMP_DIR
 

 

<think>好的,用户的问题是关于在使用Maven部署时如何去除快照版本中的时间戳。我需要先理解用户的具体需求。用户提到希望确保构建产物的一致性,所以可能是在自动化部署或者持续集成环境中,需要固定的版本号来避免每次构建生成不同的文件名,这样依赖管理会更方便。 首先,我得回忆一下Maven的快照版本机制。默认情况下,Maven会给SNAPSHOT版本在部署时添加时间戳和构建号,比如0.0.1-20231005.123456-1。这样的设计是为了区分不同的快照构建,但有时候用户可能不需要这种动态版本,特别是当他们希望每次部署的版本号保持一致,或者有外部系统依赖固定的版本号时。 接下来,我需要查阅用户提供的引用内容。引用[2]和引用[3]都提到了时间戳相关的配置。引用[2]中展示了如何在pom.xml中配置finalName以及使用maven.build.timestamp.format来格式化时间戳。而引用[3]则涉及distributionManagement的设置,但用户的问题是关于去除时间戳,所以重点应该在如何禁用Maven的默认时间戳行为。 我记得Maven的版本策略中,有一个参数可以控制是否生成唯一的时间戳。在distributionManagement的snapshotRepository部分,可以设置uniqueVersion为false。这在引用[2]的例子中出现过,其中将uniqueVersion设置为false,这样上传的快照版本就不会带时间戳了。不过需要确认这个配置的正确位置和有效性。 另外,引用[3]中的例子没有设置uniqueVersion,所以可能需要用户显式添加这个配置。同时,可能需要检查Maven的版本,因为不同版本的Maven可能对这个参数的支持不同。例如,较新的Maven版本可能默认启用uniqueVersion为true,而旧版本可能行为不同。 此外,用户可能需要修改构建的finalName,以确保生成的文件名不包含时间戳。引用[2]中的例子使用了finalName元素,结合时间戳格式化的方法,但用户希望去除时间戳,所以可能需要将finalName中的时间戳部分去掉,或者直接使用固定的版本格式。 还有一个需要注意的是,即使设置了uniqueVersion为false,Maven是否仍然会附加时间戳可能还依赖于仓库管理器的配置。例如,Nexus可能对快照版本的处理有自己的策略,需要确保仓库配置允许不带时间戳的快照版本。 总结解决方案步骤: 1. 在pom.xml的distributionManagement部分,配置snapshotRepository并设置uniqueVersion为false。 2. 确保Maven构建的finalName不包含时间戳,可能需要调整finalName的配置。 3. 检查仓库管理器的设置,确保其接受不带时间戳的快照版本。 另外,需要提醒用户,禁用时间戳可能导致覆盖之前的快照版本,这在团队协作中可能会引发问题,因为其他开发者可能依赖于不同的快照构建。因此,建议仅在确实需要固定版本号的情况下使用此配置,并确保团队了解这一变更的影响。</think>在使用Maven部署时去除SNAPSHOT版本的时间戳,可以通过以下配置实现: ### 1. 禁用时间戳唯一版本 在`pom.xml`的`distributionManagement`中设置`<uniqueVersion>false</uniqueVersion>`,这会强制Maven使用固定格式的SNAPSHOT版本号(例如`0.0.1-SNAPSHOT`),而非带时间戳的版本(如`0.0.1-20231005.123456-1`): ```xml <distributionManagement> <snapshotRepository> <id>nexus</id> <url>http://your-repo-url</url> <uniqueVersion>false</uniqueVersion> <!-- 关键配置 --> </snapshotRepository> </distributionManagement> ``` 该配置会直接移除时间戳后缀[^2][^3]。 ### 2. 自定义构建产物名称(可选) 若需要进一步控制生成的JAR/WAR包名称,可在`<build>`中配置`<finalName>`: ```xml <build> <finalName>${artifactId}-${version}</finalName> <!-- 去除时间戳变量 --> </build> ``` 或针对war包使用`maven-war-plugin`: ```xml <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>${project.artifactId}-${project.version}</warName> </configuration> </plugin> ``` 这会生成如`myapp-1.0-SNAPSHOT.war`的标准化文件名[^2]。 ### 3. 部署验证 执行部署命令: ```bash mvn clean deploy ``` 检查仓库中生成的版本号是否符合`1.0-SNAPSHOT`格式,且文件名不包含时间戳。 --- ### 注意事项 1. **覆盖风险**:禁用时间戳会导致同名版本文件被覆盖,需确保部署流程设计合理 2. **仓库兼容性**:部分私有仓库(如Nexus)需开启`Allow Redeploy`权限以支持覆盖操作 3. **版本管理**:建议仅在自动化流水线中使用此配置,开发阶段保留时间戳以区分不同构建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值