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

Maven Tycho,添加Maven依赖项

元胡媚
2023-03-14

我们用Maven和Tycho构建了一个Eclipse插件。然而,目前我们仍然通过一堆手动添加的JAR文件而不是Maven来提供所有的项目依赖。这是由于以下原因:(1)依赖项不能通过标准的Eclipse更新站点获得(至少不能在当前版本中获得),(2)依赖项不能作为捆绑包获得。

这些依赖项中最大的部分是Selenium库(API,远程,特定于浏览器的库及其传递依赖项,例如Guava等)。

我浪费了几个小时,试图在我们的Maven构建过程中拉取这些依赖项。在这个SO问题之后,我尝试了p2-maven-plugin,创建了一个更新站点,其中包含我的Eclipse目标平台。但是,在运行时,无法加载跨不同 JAR 引用的类(根据我非常有限的 OSGi 知识,我假设,因为清单中缺少一些必要的信息。MF 文件)。下面是尝试创建 RemoteWebDriver 时的问题示例,该驱动程序使用 DesiredCapabilities 类(两个类位于不同的捆绑包中):

Exception in thread "Thread-8" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/DesiredCapabilities
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:243)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:126)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:153)
    …
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.DesiredCapabilities cannot be found by org.seleniumhq.selenium.remote-driver_2.45.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:439)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

在使用p2-maven-plugin时,还有什么我需要注意的吗?pom.xml的相关部分如下所示:

<plugin>
    <groupId>org.reficio</groupId>
    <artifactId>p2-maven-plugin</artifactId>
    <version>1.1.1-SNAPSHOT</version>
    <executions>
        <execution>
            <id>default-cli</id>
            <configuration>
                <artifacts>
                    <artifact>
                        <id>org.seleniumhq.selenium:selenium-remote-driver:2.45.0</id>
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
    </executions>
</plugin>

共有3个答案

尤祖鹤
2023-03-14
匿名用户

我还用Maven和Tycho构建了一个Eclipse插件。我也有同样的问题:捆绑包<code>org.eclipse.team.svn。核心和org.eclipse.team.svn。ui无法通过标准Eclipse更新站点获得。

也许你可以尝试这样来解决这类问题:

    在“依赖项”
  1. 中,找到“依赖项的自动管理”框。
  2. 使用添加所需的插件...
  3. 选择“分析代码”并将依赖项添加到清单。MF 通过: 导入包
  4. 单击“添加依赖项”,以便在附近的“导入的包”框中找到所需的包。

然后您可以运行Maven构建。

狄心水
2023-03-14

另一种可能性:

有些jar文件可能会坏(如果你用的是Eclipse,那就是老生常谈的hibernate-commons-annotations-4 . 0 . 1 . final . jar;无效的LOC头(错误的签名)?).要检查这种可能性,请尝试手动打开罐子,看看是否可以。

沈博延
2023-03-14

无法使其工作,因此我们现在使用maven-dependency-plugin复制依赖,我们在maven 阶段执行该插件以提取所有必要的依赖项(与我最初的感觉相反,这可以使用 eclipse-pluginpom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <includeScope>runtime</includeScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后,Maven依赖项被复制到< code >目标/依赖项

唯一的小问题:<code>MANIFEST中的<code>Bundle ClassPath</code>。MF需要手动更新,以防在更新Maven依赖项时JAR文件的名称发生变化(例如commons-io-2.4.JAR变成commons-io-2.5.JAR)。

[编辑]关于上面最后一句话,重新审视这个答案:可以通过以下选项方便地剥离版本号:

 类似资料:
  • 如何将此WorldEdit依赖项添加到Maven项目中?http://maven.sk89q.com/artifactory/repo/com/sk89q/worldedit/worldedit-bukkit/我需要6.1.1快照。 是否有算法来获取组ID工件ID和版本?

  • 错误:无法初始化主类com.companyname.bank.App,原因是:java.lang.NoClassDefFoundError:org/apache/http/client/ResponseHandler 我在pom.xml文件中添加了依赖项,在/src/lib中也添加了相关的.jar文件之后,这个报告一直出现。真的很困惑,不知道怎么解决。 请帮我一把。谢谢。 以下是我的操作流程: >

  • 问题内容: 如何获取我拥有的jar文件并将其添加到Maven 2的依赖系统中?我将成为此依赖项的维护者,并且我的代码需要在类路径中使用此jar,以便对其进行编译。 问题答案: 您必须分两步执行此操作: 1.给您的JAR一个groupId,artifactId和版本,然后将其添加到您的存储库中。 如果您没有内部存储库,而只是试图将JAR添加到本地存储库,则可以使用任意groupId / artifa

  • 使用 我修改了以包含导入语句。因此,maven无法找到我试图使用并将其与项目链接的jar。 我向pom.xml文件添加了一个依赖项,如下所示:

  • 从我读到的内容来看,我似乎需要一个pom.xml文件。也许我应该先以某种方式将maven添加到项目中?