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

集成Maven、Tycho和Eclipse时处理非OSGi依赖关系

薛利
2023-03-14

我当前设置中最麻烦的部分是由于Tycho显然无法处理只使用Maven(即非OSGi)的工件。我当前的设置如下所示:

>

  • 在每个Eclipse插件的pom.xml中,我在initialize阶段向maven-dependency-plugin发出unpack目标。这将把我指定的工件解压缩到单独的target/dependencies目录中。

    target/dependencies目录作为输出目录添加到build.properties中,以便Tycho在编译时将其添加到类路径中:

    source.. = src/main/java/
    output.. = target/classes/
    output.. = target/dependencies/
    

    这些设置允许compileMaven指令编译插件。从VCS导入项目,并手动指定target/dependencies目录作为Eclipse中的类文件夹,这样IDE也可以编译插件。

    不幸的是,这是一个相当麻烦的解决方案,原因有几个:

    >

  • 配置maven-dependency-plugin需要列出所有应该解压缩的工件。可以使用unpack-dependencies而不是unpack,但这也会解压缩所有OSGi依赖项--在每个项目目录中解压缩一半的Eclipse并不是我想要的乐趣...

    同样,从Tycho项目查看依赖项的源代码不会显示主源文件,而是显示target/dependencies中可用的任何内容--很可能只是.class文件。

    我认为必须有一种更合理的方法来实现这一点--允许Eclipse和Maven项目更紧密地集成。

    那么,我错过了什么?这个用例的建议设置是什么?还有更好的选择吗?最好是一些不需要设置一堆Nexus和/或p2存储库的东西?

  • 共有1个答案

    范兴文
    2023-03-14

    我们似乎采用了类似的策略。但是,我使用nexus混合存储库(同时拥有maven和p2)。

    • 为了解包依赖项,我使用maven-dependency-plugin将它们放在target/dependency中(见下文)。
      • 1.1。复制依赖项不需要解包就可以完成所需的工作。
      • 2.1。是的,mvn必须初始化目标/依赖项
        null
        null
              <plugin>
                  <!-- Copy non-Ecipse plugins to target/dependency so that may be referenced 
                      for runtime use. -->
                  <artifactId>maven-dependency-plugin</artifactId>
                  <version>2.1</version>
                  <executions>
                      <execution>
                          <id>copy-dependencies</id>
                          <goals>
                              <goal>copy-dependencies</goal>
                          </goals>
                          <configuration>
                              <excludeGroupIds>org.XXX</excludeGroupIds>
                          </configuration>
                      </execution>
                      <execution>
                          <id>classpath</id>
                          <goals>
                              <goal>build-classpath</goal>
                          </goals>
                          <configuration>
                              <fileSeparator>/</fileSeparator>
                              <prefix>target/dependency</prefix>
                              <outputFile>${project.build.directory}/classPath.txt
                              </outputFile>
                          </configuration>
                      </execution>
                  </executions>
              </plugin>
      
      bin.includes = META-INF/,
      target/classes/,
      plugin.xml,
      target/dependency/mongo-java-driver-2.11.3.jar
      
      Bundle-ClassPath: .,
      target/classes/,
      target/dependency/mongo-java-driver-2.11.3.jar
      

     类似资料:
    • 我们用Maven和Tycho构建了一个Eclipse插件。然而,目前我们仍然通过一堆手动添加的JAR文件而不是Maven来提供所有的项目依赖。这是由于以下原因:(1)依赖项不能通过标准的Eclipse更新站点获得(至少不能在当前版本中获得),(2)依赖项不能作为捆绑包获得。 这些依赖项中最大的部分是Selenium库(API,远程,特定于浏览器的库及其传递依赖项,例如Guava等)。 我浪费了几个

    • 问题内容: 根据我的经验,Maven在小型/实验性应用程序中常常是过大的。但是,依赖管理是Maven的一项非常有用的功能,实际上是唯一对上述应用程序类型真正有用的功能。 我想知道是否可以有一个 非常最小的轻量级 Eclipse-Maven集成,该集成 仅以 最简单的方式 仅 将Maven依赖项添加到Eclipse项目类路径中。 特别是我不想: 适用于任何Maven约定(包括项目布局召集人) 安装并

    • 我遇到了一个关于OSGI包和“普通”maven jar依赖关系的问题。 A.M是普通的java应用程序,它启动OSGI框架并加载包。 在项目顶层pom(a.pom)中,我定义了一个commons-logging-1.1.1的依赖项,然后在OSGI包a.x中使用commons-logging。maven-bundle-plugin为a.x生成清单,其中包含一个发生“commons-logging”的

    • 在下面的示例中,OSGi解析和Maven依赖支持中所需的步骤似乎存在差异/重复。 我有一个jar,它依赖于外部第三方jar,在本例中时间为4J。 然后,我可以通过导入包并运行等方式在本地运行我的简单jar。 当导入OSGi时,我必须确保首先导入这个jar,通常使用PAX包装URL。 这对于一个jar依赖关系是可以的,但是当有多个依赖关系时又如何。我可以使用features.xml文件来收集这些JA

    • 我是OSGI开发的新手,很难理解如何最好地处理依赖的JAR。 也就是说,如果我要创建一个bundle,我可能需要使用几个第三方jar。当我创建bundle JAR以部署到OSGI时,显然这些第三方JAR不包括在内,因此bundle将无法运行。

    • 我们有一个多模块maven项目,它最近由Ant Ivy转换而来。其中一个模块是一个遗留的自定义可插入组件,它在类路径上查找插件并加载它们。多模块项目中的另一个模块是由上述插件运行的插件实现。 当从eclipse运行配置运行自定义应用程序服务器时,我们必须在类路径上包含每个插件。当我们在eclipse工作区中构建时,这些插件并没有编译成jar。因此,没有要包含的jar工件。 如果我将插件模块项目作为