当前位置: 首页 > 知识库问答 >
问题:

在 Eclipse RCP Tycho 应用程序中使用第三方库

堵凯
2023-03-14

我已经创建了一个锅炉板项目,遵循vogella的广泛Tycho教程。

事实:

    < li >没有功能,也没有插件。唯一的插件是RCP应用程序,这也是入口点。

问题:

>

  • 我不知道哪个<code>pom。xml是否包含第三方依赖项。

    我不能将它们包含在RCP项目中,因为pom的打包是< code>eclipse-plugin,而不是< code>jar。据我所知,如果我将打包改为< code>jar,那么“Maven Dependencies”库就会自动添加。如果我改回< code>eclipse-plugin,它们就会被删除。

    问题:

    • 我在哪里添加依赖项?我的项目中没有带有jar打包的pom。
    • 我应该使用必要的JAR创建一个单独的项目吗?如何将该依赖项包含到我的整个项目中?
    • 为这个RCP应用程序创建一个单独的插件和一个功能真的是一个很好的实践吗?

    相关解决方案

    • “更新项目”不起作用,其他SO问题中的n个其他解决方案也不起作用
    • 还有这个问题和那个问题,但我没有完全得到答案
  • 共有2个答案

    慕容康安
    2023-03-14

    只是将插件添加到pom依赖项并包含条目

    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <version>${tycho.version}</version>
            <configuration>
                <!-- The configuration to make tycho consider the maven dependencies -->
                <pomDependencies>consider</pomDependencies> 
                <!-- other configurations -->
            </configuartion>
        </plugin>
        <!-- other plugins-->
    </plugins>
    <dependencies>
        <!-- An example third-party bundle (plugin) present in maven repository-->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.gogo.shell</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>
    

    参考链接在这里。

    严修德
    2023-03-14

    我认为你有一个根本性的误解。

    Maven:Maven通过pom.xml确定所有项目依赖项,并自动解析传递依赖项(假设所有pom文件和工件都存在于您已配置并正确声明其依赖项的存储库中)。

    Tycho:问题是Eclipse已经有了自己的基于产品文件、feature.xml文件和插件清单的项目模型。MF文件。Tycho为Eclipse利用了Maven机制,但其思想是pom.xml文件只是配置Maven插件并声明打包类型。这为Maven提供了一个切入点,但随后第谷接管了它。Maven通常从pom.xml文件中的信息构建依赖关系链,而Tycho从产品、特性和清单中的信息构建依赖关系变更。MF文件。您没有在pom.xml文件中放置任何依赖项。Tycho还使用Eclipse p2存储库(而不是普通的Maven存储库)来查找在本地模块或目标平台中找不到的依赖插件。

    这对许多Eclipse开发人员来说实际上是一个好处,因为他们已经在Eclipse插件、特性和产品中正确地设置了一切。他们不想重复pom.xml中的所有依赖项。

    在Eclipse插件中使用库:在Eclipse中,如果您想使用尚未打包为Eclipse插件的库,您有几个选项。您的插件可以在libs文件夹中包含一组JAR,然后在插件和运行时类路径中包含该libs文件夹(参见build.properties文件)。另一个选项是创建您自己的“库插件”,将JAR库重新打包为Eclipse插件。另请参见https://wiki.eclipse.org/FAQ_What_is_the_classpath_of_a_plug-in?.这就是您上面得到的答案。

    问题是,如果您试图通过Maven将一个包含多个jar的复杂库包含在一个标准Java项目中。在我的项目中,我们在新泽西JAX-RS实现中遇到了这个问题。没有一个p2存储库将所有的库作为插件包含在正确的依赖信息中。

    简单的解决方案:如果您需要一个公共库,请先检查Orbit项目,看看这些库是否已经打包为Eclipse插件,http://www.eclipse.org/orbit/.在这种情况下,您可以下载它们并将它们包含在您的目标平台中,或者您可以在(Tycho)构建时从它们的p2存储库中动态提取它们。您的插件将仅将这些插件作为依赖项包含在它们的MANIFEST.MF文件中。

    变通方法/解决方案:在我们的例子中,Jersey JAX-RS不可用作Eclipse插件,它有一系列可传递的依赖关系。解决方法是使用两个pom文件创建一个Eclipse“库插件”,就像我前面提到的那样。我们最初创建了一个带有空libs文件夹的框架插件。一个pom文件只是带有<code>的标准Maven pom文件

    <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>compile</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>libs</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    <罢工> 实际上,我们最终用pom手动运行Maven来更新库,然后我们将插件及其所有依赖的jar签入源代码控制。 稍后检查构建时,我发现在开始构建的Maven/Tycho部分之前,我们实际上用单独的构建任务动态地填充了libs文件夹。当然,插件的MANIFEST-MF文件的Bundle-ClassPath和Export-Package条目直接来自源代码控制。我们必须不时地检查它们,以确保它们与我们从Maven获得的库和包相匹配。(除非我们升级主要的库版本或者在Maven级别添加新的依赖项,否则这不会有太大的变化。)插件的build.properties将libs/文件夹作为bin.includes的一部分。

    在开发环境中,在我们第一次签出代码后,我们只需在项目的“复制依赖项”pom文件上运行mvn(带有外部工具启动配置,也与项目一起签入)。这用所有的JAX-RS库和依赖项填充libs文件夹。我们只需要在更新依赖关系或者在拥有不同版本的JAX-RS依赖关系的分支之间跳转时,再运行一次。我们就位了。gitignore确保我们不会将库提交给Git。

    这个项目的另一个pom被设置为一个普通的Tycho pom文件,带有<code>

    所以,这有点乱,但这是我们几年前遇到这个问题时找到的最好的解决方案。我不确定Tycho是否正在做任何工作来允许某种混合Maven/Tycho构建,这可以作为构建的一部分自动完成。我想我应该问问开发商。:)

    您的问题:

    • 我在哪里添加依赖项?我的项目中没有带有jar包装的pom。答:上面的解决方法允许您使用一个项目来完成。您只有两个pom文件,如pom_deps.xml和pom.xml.您只需要单独调用pom_deps.xml来填充libs文件夹(在开发环境中和您的自动化构建中)。
    • 我应该使用必要的JAR创建一个单独的项目吗?如何将该依赖项包含到我的整个项目中?回答:我上面描述的解决方法允许您使用单个项目来完成它。另一种方法是创建一个单独的JAR项目,但我不认为您的Eclipse RCP应用程序真的可以包含

    总结:根本问题是 Eclipse 插件无法“看到”裸露的 JAR 库。插件需要将库包含在其本地 libs 文件夹中(在 MANIFEST 中具有匹配的 Bundle-ClassPath 条目。MF),或者它需要依赖于导出相应包的其他插件。第谷只是通过 Eclipse 插件解析依赖关系,它不能直接利用普通的 Maven 依赖解析来拉入一堆 JAR。如果您的所有依赖项都已经是插件,则没问题。如果没有,您可能必须使用上述解决方法打包一组库以供插件使用。

     类似资料:
    • 我们是否可以将Azure Applications Insight dashboard嵌入到我们的一个第三方站点中,以允许我们的客户查看它提供的信息? 我还知道,使用API手动构建这些仪表板是可能的,但是,简单地获取Azure门户中创建的度量图的嵌入式代码会更好。 有人能做到吗?

    • 应用第三方库 ThinkCMF5.1支持应用自己安装第三方库,下面以 demo应用为例讲一下如何在应用中引入第三方库 创建 composer.json 在demo 应用根目录app/demo中创建composer.json文件 { "name": "thinkcmf/apps-demo", "description": "ThinkCMF demo app", "type"

    • mvn安装:install-file-dfile=~/dropbox/github/chatappserver/synthetica.jar-dgroupid=de.javasoft.plaf-dartifactid=synthetica-dversion=1.0.0-dpackaging=jar (这是针对syntheticablackeye.jar的) mvn安装:install-file-d

    • 我想使用kafka-clients作为我的keycloak模块,以便将每个登录事件发布到它中。 我应该造个耳朵吗?一场战争?一个罐子够吗?

    • 针对如何在app中打开第三方的应用这个问题,本文将以打开新浪微博为例做详细讲解。 1.配置所要打开的应用 在Native/plugins文件夹下新建所要打开的应用的文件夹,其中有配置文件plugin.xml。 以新浪微博为例: plugin.xml内容如下: <?xml version="1.0" encoding="UTF-8"?> <plugin xmlns="http://apache.

    • 问题内容: 我想使用jQuery和其他不是React本身的第三方库。如何在我的React项目中使用它们?我读到的是调用第三方库的好地方。 不幸的是,即使我已经正确地将脚本标记链接到index.html文件中的那些库,但由于不断收到“未定义”错误,所以我无法使用这些库。 问题答案: 您有两个选择,均由一个人为设计的示例演示,其中我使用jQuery淡出了无序列表。两种方法都各有利弊,我先强调两种方法,