Maven:如何检查工件是否存在?

2023-12-14

如何从 Mojo 内部检查本地存储库中是否已存在工件?

我正在将大型二进制文件安装到本地 Maven 存储库中,在尝试下载它们之前我需要知道它们是否已经存在。


在以下人员的帮助下解决了http://docs.codehaus.org/display/MAVENUSER/Mojo+Developer+Cookbook

/**
 * The local maven repository.
 *
 * @parameter expression="${localRepository}"
 * @required
 * @readonly
 */
@SuppressWarnings("UWF_UNWRITTEN_FIELD")
private ArtifactRepository localRepository;
/**
 * @parameter default-value="${project.remoteArtifactRepositories}"
 * @required
 * @readonly
 */
private List<?> remoteRepositories;
/**
 * Resolves Artifacts in the local repository.
 * 
 * @component
 */
private ArtifactResolver artifactResolver;
/**
 * @component
 */
private ArtifactFactory artifactFactory;
[...]
Artifact artifact = artifactFactory.createArtifactWithClassifier(groupId, artifactId, version, packagingType, classifier);
boolean artifactExists;
try
{
  // Downloads the remote artifact, if necessary
  artifactResolver.resolve(artifact, remoteRepositories, localRepository);
  artifactExists = true;
}
catch (ArtifactResolutionException e)
{
  throw new MojoExecutionException("", e);
}
catch (ArtifactNotFoundException e)
{
  artifactExists = false;
}
if (artifactExists)
  System.out.println("Artifact found at: " + artifact.getFile());

如果您想检查远程工件是否存在而不下载它,您可以使用以太库执行以下操作(基于http://dev.eclipse.org/mhonarc/lists/aether-users/msg00127.html):

MavenDefaultLayout defaultLayout = new MavenDefaultLayout();
RemoteRepository centralRepository = new RemoteRepository.Builder("central", "default", "http://repo1.maven.org/maven2/").build();
URI centralUri = URI.create(centralRepository.getUrl());
URI artifactUri = centralUri.resolve(defaultLayout.getPath(artifact));
HttpURLConnection connection = (HttpURLConnection) artifactUri.toURL().openConnection();
connection.setRequestMethod("HEAD");
connection.connect();
boolean artifactExists = connection.getResponseCode() != 404;

具有以下依赖关系:org.eclipse.aether:aether-util:0.9.0.M2以及以下进口:

import java.net.HttpURLConnection;
import java.net.URI;

import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.util.repository.layout.MavenDefaultLayout;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven:如何检查工件是否存在? 的相关文章

随机推荐

  • 让 chrome 显示 rss feed (2)

    这个问题是这个问题的后续问题 使用 google chrome 查看 rss feed 我从此页面复制了源代码 希望这对网站所有者来说没问题 http www petefreitag com rss 我转义了所有引号并用它制作了一个 php
  • Python函数参数作为全局变量

    我编写了以下函数 它接受一个变量input name 然后用户输入一些值 该值被分配给input name 我想知道最好的制作方法input name可在函数外部访问 我知道在函数内部将变量定义为全局变量意味着可以在函数外部使用该变量 然而
  • 你能在继承树中重新抽象一个方法吗?

    EDIT 需要明确的是 设计相当丑陋并不是重点 关键是 设计已经存在 我面临的情况是必须添加另一个子类FlyingMotorizedVehicle如果我忘记添加 这将无法按预期工作foo 所以我只是想知道是否可以将其重新定义为抽象 我现在面
  • 如何在 Drupal 8 中更新我的视图而不返回首页?

    我正在尝试刷新 Drupal 8 中的视图 而无需使用以下代码重新加载页面 function Drupal use strict setInterval function view message activity stream timel
  • 如何检测AVPlayer视频何时结束播放?

    我正在使用 AVPlayer 在 Swift 中播放本地视频文件 mp4 有谁知道如何检测视频何时播放结束 谢谢 为了得到AVPlayerItemDidPlayToEndTimeNotification你的对象需要是 AVPlayerIte
  • 使用 mechanize 登录网页

    这是我第一次使用 Python 编程 我正在尝试登录this网页 经过搜索 我发现很多人建议使用mechanize 为了确保我在开始编码之前正确设置 我下载了mechanize从网站上下载 zip 并将我的 python 脚本放在解压缩的
  • PHP 中的新行。如何?

    Code 我试图将其显示为两行 但换行符不起作用 而是在两行之间打印一个空格 我尝试过 r n 以及 PHP EOL 以及将字符串放在单引号中 它们似乎都不起作用 那么如何在 PHP 中打印新行呢 我正在研究 phpDesigner 8 U
  • fget 和 gets 之间的区别

    有什么区别fgets and gets 当用户点击 输入 时 我试图打破循环 它配合得很好gets 但我不想使用gets 我尝试过fgets and scanf 但我没有得到相同的结果gets fgets 无论用户在文本中输入什么 都会打破
  • 在Android中,不应该使用System.gc()吗?

    我想知道不应该在 android 中使用 System gc 我搜了一下开发者文档 Result 公共静态无效GC 添加到 API 级别 1 向虚拟机表明现在是个好时机 运行垃圾收集器 请注意 这只是一个提示 有 不能保证垃圾收集器实际上会
  • Android Studio:库项目依赖项是否从project.properties中选取?

    我已经从 ADT 导入了我的项目 进入 模块设置 并编辑依赖项后 一切工作正常 我的 build gradle 的依赖项块为空 所以我想知道 Ansdroid Studio 从哪里选择库依赖项 当我从 eclipse 迁移时 模块目录中有
  • 同时多个手势响应器

    我需要一些可以同时按下的按钮 但目前如果您按下一个按钮 它会 声称 响应 而其他按钮则无法再按下 我该怎么做呢 知道了 你必须使用ReactNativeEventEmitter直接监听触摸事件并完全绕过手势响应器 下面是一个装饰器类 它调用
  • 我可以在 tomcat 中放置手动提取的战争而不是deployOnStartup = true吗? tomcat中已经解压war文件是否正确

    我在 tomcat server xml 中添加了deployOnStartup true 但由于安全问题 建议将deployOnStartup false 因为保持它为true会允许部署恶意或未经测试的应用程序 因此应该禁用它 将提取的
  • 如何阻止 Windows 窗体中重写的 WndProc 函数中的双击?

    我在 Windows 窗体中创建了一个窗体 可以将其拖动到任意位置 我通过重写 WndProc 函数来实现它 该函数反过来修改每次单击 因为它是标题栏单击 found at http stackoverflow com questions
  • 混淆测试 fftw3 - 泊松方程 2d 测试

    我无法解释 理解以下现象 为了测试 fftw3 我使用 2d 泊松测试用例 laplacian f x y g x y 具有周期性边界条件 对方程进行傅里叶变换后 我们得到 F kx ky G kx ky kx ky 1 如果我取 g x
  • 在 Windows 8.1 存储 XAML 中添加新项目后,ListView.ContainerFromItem 返回 null

    我有一个简单的 ListView 没有项目模板和 SelectionChanged 事件设置
  • PHP MYSQLI编写语句登录并检查用户状态

    我正在学习使用一些基于 mysqli 的视频教程制作网站 我开始知道使用准备好的语句更安全 我正在尝试创建一个登录系统 这是我到目前为止所做的 这段代码帮助我完全登录成功
  • 使用 Cloud Functions 在 Google Cloud Platform 中设置环境变量

    我正在关注在这里指导并且似乎无法让我的Python应用程序 在GCP上很好地部署 来读取我在Cloud Functions中创建的环境变量 该函数的 REST 端点可以很好地返回环境变量 因为我已经在函数中编写了 Python 方法来执行此
  • 在访问选项卡之前,另一个选项卡中的传单未使用 leafletproxy 进行更新

    我正在制作一个使用闪亮的应用程序 该应用程序使用多个选项卡 在一个选项卡 不是起始选项卡 上 我显示一张传单地图 该地图由不同选项卡上的小部件控制 问题是 如果我更改一个选项卡上的输入 而不先访问地图 然后访问地图 则地图不会更新 但是 在
  • vue-router 与 laravel 路由结合

    我已成功设置 vue router 但将其与我的 laravel 5 3 路由混合时遇到一些问题 我有一个回家的 php 路线 Route get array as gt home uses gt HomeController showWe
  • Maven:如何检查工件是否存在?

    如何从 Mojo 内部检查本地存储库中是否已存在工件 我正在将大型二进制文件安装到本地 Maven 存储库中 在尝试下载它们之前我需要知道它们是否已经存在 在以下人员的帮助下解决了http docs codehaus org display