在常规 Maven 构建中使用 Eclipse p2 存储库中的依赖项?

2023-12-24

我想在“常规”Maven 3 构建(例如 JAR 或 WAR 打包)中使用来自远程 Eclipse p2 存储库的依赖项 - 所有这些都无需将 p2 存储库转换为本地 Maven 存储库(这就是 osgi-to-maven2 和m4e 似乎可以)。

理想情况下,我只想使用http://maven.eclipse.org/nexus/ http://maven.eclipse.org/nexus/,但它(还没有?)包含很多捆绑包。

使用Maven的systemPath不算!


看来我正在回答我自己的另一个问题..

首先,您可以使用 Tycho 添加对 P2 存储库中的包的依赖项:

  • 配置构建以使用 tycho-maven-plugin。
  • 指定 P2 存储库。
  • 将打包设置为“eclipse-plugin”。
  • 为您的构建创建清单并使用 Require-Bundle 来声明依赖关系(例如 org.eclipse.xsd)。还将 Bundle-Version 设置为我们在 pom.xml 中构建时使用的相同版本。

让我们尝试一下:

$ mvn dependency:tree
[INFO] com.example:org.eclipse.xsd:eclipse-plugin:0.0.1
[INFO] +- p2.eclipse-plugin:org.eclipse.xsd:jar:2.6.0.v20100914-1218:system
[INFO] ...
[INFO] \- p2.eclipse-plugin:org.eclipse.core.filesystem:jar:1.3.1.R36x_v20100727-0745:system

我们的依赖关系已成功从 P2 存储库中解决。不幸的是,我们还没有完成。依赖项已添加到系统范围内,这意味着如果我们创建依赖于我们的构建的 Web 应用程序,则不会包含工件。为了解决这个问题,我们首先将依赖项中包含的所有类解压到某个目录,然后将该目录重新打包为 jar 并将其用作构建的最终工件。

对于第一部分(解包),我们将 maven-dependency-plugin 添加到我们的构建中,并将其配置为在打包阶段运行其 unpack-dependency 目标。对于第二部分(重新打包),我们将 maven-assemble-plugin 添加到我们的构建中,并将其配置为在打包阶段运行其单一目标。我们还需要创建和配置自定义程序集描述符。

我们的构建现在由 3 个文件组成: pom.xml 中的构建文件:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>org.eclipse.xsd</artifactId>
    <version>0.0.1</version>
    <packaging>eclipse-plugin</packaging>
    <repositories>
        <repository>
            <id>helios</id>
            <layout>p2</layout>
            <url>http://download.eclipse.org/releases/helios</url>
        </repository>
    </repositories>
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-maven-plugin</artifactId>
                <version>0.12.0</version>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>unpack-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/dependency</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>true</overWriteSnapshots>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/repackaged.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

META-INF/MANIFEST.MF 中的清单:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Ignored
Bundle-SymbolicName: Ignored
Bundle-Version: 0.0.1
Require-Bundle: org.eclipse.xsd
Bundle-Vendor: Ignored

src/main/Assembly/repackaged.xml 中的程序集描述符:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>repackaged</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
      <fileSet>
        <directory>${project.build.directory}/dependency/</directory>
        <outputDirectory>/</outputDirectory>
        <useDefaultExcludes>true</useDefaultExcludes>
      </fileSet>
    </fileSets>
</assembly>

现在 mvn package 将创建一个 jar 文件,其中包含 P2 依赖项中的所有代码,重新打包为适当的 Maven 工件,准备在另一个项目中用作依赖项。

$ jar tf target/org.eclipse.xsd-0.0.1-repackaged.jar 
org/eclipse/xsd/ecore/XSDEcoreBuilder$1.class
org/eclipse/xsd/ecore/XSDEcoreBuilder$2.class
org/eclipse/xsd/ecore/XSDEcoreBuilder$Comparator.class
org/eclipse/xsd/ecore/XSDEcoreBuilder$EffectiveOccurrence.class
org/eclipse/xsd/ecore/XSDEcoreBuilder.class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在常规 Maven 构建中使用 Eclipse p2 存储库中的依赖项? 的相关文章

  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • ES6 类的 Mixins,用 babel 转译

    根据各种消息来源 2ality http www 2ality com 2013 07 defending constructors html 讨论 https esdiscuss org topic traits mixins for c
  • grep 仅由大写字母组成的整个单词

    看起来这很简单 但我遇到了麻烦 我有一个文本文档 例如 如下所示 这是一个文本文档一些大写的单词但并非全部都是全部大写iPhone 我想要的是解析该文档并仅匹配仅由大写字母组成的整个单词 如下所示 文本文件 SOME 但不是全部大写 我写了
  • vscode 中 Windows 10 中的 Node.js 安装错误

    Exception calling DownloadString with 1 argument s The request was aborted Could not create SSL TLS secure channel At li
  • 以内存高效的方式将大型 csv 读入稀疏 pandas 数据帧

    熊猫read csv函数似乎没有稀疏选项 我有 csv 数据 里面有很多零 它压缩得很好 并且去掉了任何0值将其减小到几乎原始大小的一半 我尝试先将其加载到密集矩阵中read csv然后打电话to sparse 但它需要很长时间并且在文本字
  • 如何在 div 元素内水平居中图像?

    如何在容器 div 内居中对齐 水平 图像 这是 HTML 和 CSS 我还添加了缩略图其他元素的 CSS 它按降序运行 因此最高的元素是所有内容的容器 最低的元素位于所有内容的内部 thumbnailwrapper color 2A2A2
  • 绕点 xna 2D 旋转

    我正在尝试围绕另一个对象 半圆形纹理 旋转一个对象 框纹理 我不知道从哪里开始 如果有人能帮助我 我将不胜感激 http msdn microsoft com en us library ff433988 aspx http msdn mi
  • QT4:如何重新启动应用程序?重新设置? [复制]

    这个问题在这里已经有答案了 1 我想重新启动我的 QT4 应用程序 只是同一应用程序的正常关闭和启动 2 为什么 好吧 我需要一个选项来 重置 一切 重新启动应用程序似乎是最简单的方法 问题是 有很多课程和一切 我没有时间将它们的每个设置恢
  • 如何比较两个图像?

    public void winCheck if button1 Image img1 w1 P2 button1 Image new Bitmap win cross png button2 Image new Bitmap win cro
  • 在刀片模板中包含 css 文件吗?

    我想在我的 Laravel Blade 模板中包含一个 css 文件 我试过了 include public path css styles css 但它说视图不存在 它确实存在 如何包含 css 文件 请注意 我知道这不是链接 css 文
  • JavaScript 回调函数中的变量范围

    我预计下面的代码会警告 0 和 1 但它警告 2 两次 我不明白原因 不知道是不是jquery的问题 另外 如果这篇文章的标题和标签不准确 请帮助我编辑
  • 如何用不同的标记绘制多条线

    我想绘制多条线MATLAB http en wikipedia org wiki MATLAB这样做 每一行的标记都会不同 我知道通过颜色可以实现这一点ColorSet hsv 12 有没有像这种简单的标记方法 好吧 我不知道内置功能MAT
  • 检测文本中的信用卡号

    我正在尝试找到一种组件或方法来检测文本中不同类型的信用卡号码 我找到了很多有关验证信用卡号的信息 但我需要能够获取文本正文 例如网页并检查是否存在信用卡号 银行帐号和 或排序代码 有谁知道有一个可以帮助商业或其他方面的组件吗 具体来说 我的
  • 黑莓表视图

    这是我的应用程序 如何在下面添加表格视图或网格 我应该画所有东西吗请帮忙 这是我的代码 import net rim device api ui import net rim device api ui component import n
  • Bash 中的 if、elif、else 语句问题

    我似乎无法弄清楚以下问题是什么if声明是关于elif and then 请记住printf仍在开发中 我只是还无法在声明中对其进行测试 因此很可能是错误的 我收到的错误是 timezone string sh line 14 syntax
  • 如何在 SwiftUI 中的文本末尾添加按钮?

    我想在游戏中心设置中创建一个类似于 Apple 的 UI 其中文本末尾有一个可点击的链接 我正在使用 SwiftUI 我尝试结合Text and Button有几个方面 Form Text A social gaming service t
  • PHP - 如何在没有 API 访问令牌的情况下从 Instagram 获取图像

    我可以在没有 Instagram API 或访问令牌的情况下从 Instagram 个人资料获取图像吗 您可以获得所有图像 只需迭代它们page info 另外 还有更方便的获取json的方式 otherPage nasa profileU
  • 如何在 javascript 中实现 C# 访问修饰符?

    Summary 我尝试在 javascript 中正确实现继承和封装 就像在基于类的语言 例如 c 中一样 丑陋的部分是受保护的成员在私有实例中有多个副本 这些副本只能通过闭包访问 除了将这些成员刷新到私有实例之外我没有任何想法 如果可以的
  • 由于连接字符串不正确,连接到 Azure MySQL 服务器失败

    当尝试从 mysql 客户端连接到 Azure 中的 MySQL 服务器时 即使我使用正确的用户名和服务器名称 也会收到以下错误 我怎样才能解决这个问题 连接字符串可能不正确 请访问门户网站以获取参考 连接到 Azure Database
  • JTable:覆盖 CTRL+C 行为

    I have a JTable set on SINGLE SELECTION mode i e the user can only select one row at a time I am trying to override the
  • 在常规 Maven 构建中使用 Eclipse p2 存储库中的依赖项?

    我想在 常规 Maven 3 构建 例如 JAR 或 WAR 打包 中使用来自远程 Eclipse p2 存储库的依赖项 所有这些都无需将 p2 存储库转换为本地 Maven 存储库 这就是 osgi to maven2 和m4e 似乎可以