【问题标题】:Automatically update Maven dependencies after JAR deploymentJAR 部署后自动更新 Maven 依赖项
【发布时间】:2018-08-23 14:40:37
【问题描述】:

我有一个 Java Maven 项目,它在 POM.xml 文件中定义了一些依赖项。 这些依赖通常每个月都有更新的版本,所以我想部署一个 JAR 文件,在每次启动时自动检查这些依赖的最新版本(无需重新构建 Java Maven 项目)。

是否有可能使用 Maven 来实现?

我知道Versions Maven Plugin 对于下载最新版本的依赖项很有用,但仅在“重新构建”项目时(不在已部署的 JAR 中)。我也知道我可以使用如下表达式:

<version>[1.8,]</version>

但是,同样,这些依赖项仅在构建项目后才会下载。我想在每次用户启动应用程序时自动更新依赖项。

更新:

我想自动更新的依赖是“selenium-chrome-driver”。我的应用程序使用 Chrome 驱动程序来启动 Google Chrome 浏览器。

问题是 Chrome 驱动程序每隔几个月就会更新一次,旧版本会变得“过时”。结果,几个月后,部署的 JAR 尝试使用旧版本的 Chrome 驱动程序启动浏览器,但它不起作用。出于这个原因,我需要自动更新这个依赖。否则,我将不得不每 X 个月部署一个新的 JAR。

【问题讨论】:

  • 这样做非常危险。您无法保证依赖库中的 API 更改不会破坏您部署的代码。这样的事情将是软件质量的噩梦。
  • 我同意,一旦新版本发布并且与现有代码不兼容,这会破坏您的代码。最好根据需要手动更新。
  • 我知道,但否则我必须每个月部署一个新的 JAR。问题是这种依赖是“selenium-chrome-driver”。如果我不更新 Chrome 驱动程序依赖项,我将无法启动浏览器,因为几个月后会出现一个新驱动程序,并且 JAR 的驱动程序变得“过时”并且无法正常工作。
  • 因此,致力于构建/部署自动化,以使部署 JAR 的新版本变得非常容易。
  • 您已经接受了 Maven 必须为您执行此操作的想法(这意味着您必须将 maven 硬连线到您的应用程序中),但本质上您要问的是如何构建一个可以自动更新某些库本身的应用程序;有或没有 Maven。也许如果您从需求中删除 Maven,您可以找到一些已经存在的东西或自己设计一些东西。

标签: java maven deployment dependencies version


【解决方案1】:

多年来我一直有同样的问题,有一个图书馆可以做到这一点,https://github.com/bonigarcia/webdrivermanager,但我自己没有尝试过

目前正在使用这个script (ubuntu)

# https://gist.github.com/ziadoz/3e8ab7e944d02fe872c3454d17af31a5
# https://gist.github.com/birdsarah/23312f1d7cbd687ac376c95662254773

# This script checks & downloads latest chromeDriver and geckoDriver IF needed.
# New drivers are extracted and copied to $driversDestination
# IMPORTANT: Remember to change $driversDestination variable below to match your case
# You can call this script before launching your test suite so you always get latest drivers each run

os=linux64
driversDestination=../dependencies/browser-drivers/

if [ -e chromedriver_last.txt ]
then
    chromedriver_last_download=`cat chromedriver_last.txt`
fi

chromedriver_latest_version=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
if [ "$chromedriver_last_download" = "$chromedriver_latest_version" ]; then
    echo "Already has last chrovedriver version" $chromedriver_latest_version
else
    echo "Updating chromedriver from " $chromedriver_last_download "to" $chromedriver_latest_version
    wget -N http://chromedriver.storage.googleapis.com/$chromedriver_latest_version/chromedriver_$os.zip -O chromedriver_linux64.zip
    echo "$chromedriver_latest_version" > "chromedriver_last.txt"
    unzip -o chromedriver_$os.zip -d $driversDestination
    rm chromedriver_$os.zip
fi

if [ -e geckodriver_last.txt ]
then
    geckodriver_last_download=`cat geckodriver_last.txt`
fi

geckodriver_latest_version=`curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest | jq -r ".tag_name"`

if [ "$geckodriver_last_download" = "$geckodriver_latest_version" ]; then
    echo "Already has last geckodriver version" $geckodriver_latest_version
else
    echo "Updating geckodriver from " $geckodriver_last_download "to" $geckodriver_latest_version
    wget https://github.com/mozilla/geckodriver/releases/download/$geckodriver_latest_version/geckodriver-$geckodriver_latest_version-$os.tar.gz -O geckodriver.tar.gz
    echo "$geckodriver_latest_version" > "geckodriver_last.txt"
    tar -xvzf geckodriver.tar.gz
    rm geckodriver.tar.gz
    chmod +x geckodriver
    mv geckodriver $driversDestination
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    相关资源
    最近更新 更多