怎么使用自定义Maven设置文件

102次阅读
没有评论

共计 4587 个字符,预计需要花费 12 分钟才能阅读完成。

本文丸趣 TV 小编为大家详细介绍“怎么使用自定义 Maven 设置文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用自定义 Maven 设置文件”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。

Mavensettings.xml 文件定义了以各种方式配置 Maven 执行的值。最常见的是,它用于定义本地存储库位置、备用远程存储库服务器以及私有存储库的身份验证信息。如果您已经有一个 Java 应用程序,您可以在本示例中使用它。否则,从 Heroku 上的 Java 入门文章创建一个简单的应用程序。

创建自定义设置文件

当 settings.xml 应用程序的根目录中存在名为的文件时,Heroku 的 Java 支持将在编译时自动使用它来配置 Maven。

为了演示这一点,settings.xml 在 Java 项目的根目录中添加一个文件,并将以下代码放入其中。

?xml version= 1.0  encoding= UTF-8 ? settings xmlns= http://maven.apache.org/SETTINGS/1.0.0 
 xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance 
 xsi:schemaLocation= http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd 
  profiles 
  profile 
  id jboss-public /id 
  repositories 
  repository 
  id jboss-public-repository /id 
  name JBoss Public Maven Repository Group /name 
  url http://repository.jboss.org/nexus/content/groups/public/ /url 
  /repository 
  /repositories 
  /profile 
  /profiles 
  activeProfiles 
  activeProfile jboss-public /activeProfile 
  /activeProfiles /settings

这告诉 Maven 在解析应用程序的依赖项时搜索托管在 http://repository.jboss.org/ 的存储库。存储库必须使用 HTTP 或 HTTPS 寻址。

我们可以通过将 - s 选项添加到任何 Maven 任务来在本地测试设置。但首先,我们需要向项目添加一个新的依赖项。该 jboss.web.servlet-api 库是一个很好的示例,因为它仅在 JBoss 存储库中可用。将以下元素添加到您的项目的 pom.xml:

dependency 
  groupId jboss.web /groupId 
  artifactId servlet-api /artifactId 
  version 2.1.0.GA /version /dependency

现在运行以下命令,Maven 将下载工件。

mvn -s settings.xml dependency:list
[INFO] Scanning for projects...
...Downloading: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.pomDownloaded: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.pom (195 B at 0.2 KB/sec)Downloading: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.jarDownloaded: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.jar (84 KB at 90.8 KB/sec)

如果我们没有使用自定义设置文件,构建就会失败,Maven 会产生这样的错误:

Downloading: http://repo.maven.apache.org/maven2/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.pom
[WARNING] The POM for jboss.web:servlet-api:jar:2.1.0.GA is missing, no dependency information available
Downloading: http://repo.maven.apache.org/maven2/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.jar
[ERROR] Failed to execute goal on project helloworld: Could not resolve dependencies for project com.example:helloworld:jar:1.0-SNAPSHOT: Could not find artifact jboss.web:servlet-api:jar:2.1.0.GA in central (http://repo.maven.apache.org/maven2) -  [Help 1]

现在将 settings.xml 和 pom.xml 更改添加到您的 Git 存储库并像这样部署到 Heroku:

当 Maven 在 dyno 上运行时,我们看到的输出与我们在本地看到的输出相同。这是有效的,因为 Heroku 检测 settings.xml 根目录中的文件,并将 - s 选项添加到 Maven 命令。接下来,我们将讨论如何自定义此位置。

定义 MAVEN_SETTINGS_PATH 配置变量

如果您不希望该 settings.xml 文件位于根目录中,或者您打算在不同的设置配置之间频繁更改,您可能更愿意将设置文件放在自定义位置。Heroku 通过 MAVEN_SETTINGS_PATHconfig 变量提供此功能。

我们可以通过将现有文件移动 settings.xml 到 support/ 目录中并像这样重命名来演示此功能:

mkdir -p support
git mv settings.xml support/jboss-settings.xml

现在我们通过定义 MAVEN_SETTINGS_PATH 相对于根目录来告诉 Heroku 设置文件所在的位置。

heroku config:set MAVEN_SETTINGS_PATH=support/jboss-settings.xml

在测试更改之前,我们增加了 servlet-api 的版本——强制 Maven 再次下载它。更改 pom.xmlto version 中的依赖项 2.1.1.GA。它应该是这样的:

dependency 
  groupId jboss.web /groupId 
  artifactId servlet-api /artifactId 
  version 2.1.1.GA /version /dependency

现在将更改提交到 Git,然后像这样重新部署到 Heroku:

git commit -am  moved settings file and incremented servlet-api version git push heroku master

Maven 将再次从 JBoss 存储库下载依赖项。这提供了一些灵活性,但有时在您的项目中自定义位置是不够的。您可能希望将文件完全保留在您的代码库之外。

定义 MAVEN_SETTINGS_URL 配置变量

当 MAVEN_SETTINGS_URL 定义配置变量,Heroku 的将下载的文件在指定的位置,并用它来配置 Maven。在演示之前,我们必须取消设置我们在上一个示例中定义的变量,因为如果两个变量都设置了,它将优先:

heroku config:unset MAVEN_SETTINGS_PATH

现在,我们可以使用 settings.xml 来自公开可用源 (例如 Torquebox Application Server 代码库) 的。像这样设置配置变量:

heroku config:set MAVEN_SETTINGS_URL= https://raw.githubusercontent.com/torquebox/torquebox/master/support/settings.xml

和以前一样,将 servlet-api 版本增加到 2.1.2.GA,添加 pom.xml 到 Git 存储库,提交更改并重新部署到 Heroku。Maven 将像之前一样从 JBoss 存储库下载新的工件。

JBoss 存储库很方便,因为它是公共的——不需要密码即可访问。但并非所有存储库都如此开放。

使用受密码保护的存储库

某些工件存储库需要用户名和密码才能访问。很多时候,存储库是托管内部工件的私有服务器。在这种情况下,必须在 中提供访问存储库的凭据,settings.xml 如果将文件签入 Git 存储库,这可能会出现问题。

幸运的是,Maven 设置文件可以检测环境变量。表单中的任何标记 ${env.ENV_VAR}(其中 ENV_VAR 是变量的名称)都将解析为关联环境变量的值。因此,我们可以将私有 Maven 存储库的密码定义为 Heroku 配置变量,如下所示:

heroku config:set MAVEN_REPO_PASSWORD= deployment123

然后,我们可以用我们的变量 settings.xml 通过创建一个文件 server 相匹配的元素 id 中的 repository 元素中 activeProfile。

servers 
  server 
  id my-private-repo /id 
  username deployment /username 
  password ${env.MAVEN_REPO_PASSWORD} /password 
  /server /servers

为了演示这一点,您将需要一个私有的 Maven 存储库。您可以通过下载 Sonatype Nexus 并按照保护存储库的说明来创建存储库。或者您可以使用 JFrog Artifactory 的托管版本。在任何一种情况下,都可以使用私有存储库来发布内部工件并将它们包含在您的 Heroku 应用程序中。

读到这里,这篇“怎么使用自定义 Maven 设置文件”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计4587字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)