Eclipse plugin 如何构建依赖于EclipseBirt的Eclipse插件项目?

Eclipse plugin 如何构建依赖于EclipseBirt的Eclipse插件项目?,eclipse-plugin,sbt,tycho,Eclipse Plugin,Sbt,Tycho,我有一组Maven项目,我想迁移到SBT 唯一阻止我这么做的是一个Eclipse插件项目,它与Eclipse Birt有依赖关系 对于Maven,处理所有依赖项。此工具在SBT中不可用。我找到了SBT的插件,但它看起来没有维护(3年没有活动) 也许我可以用Maven构建Eclipse插件,用SBT构建其他项目。但我不知道这是否可能 另一种选择是使用Gradle,通过 StackOverflow中的相关问题: 但我更喜欢在Maven或Gradle之前使用SBT,这样就不会引入Scala之外

我有一组Maven项目,我想迁移到SBT

唯一阻止我这么做的是一个Eclipse插件项目,它与Eclipse Birt有依赖关系

对于Maven,处理所有依赖项。此工具在SBT中不可用。我找到了SBT的插件,但它看起来没有维护(3年没有活动)

也许我可以用Maven构建Eclipse插件,用SBT构建其他项目。但我不知道这是否可能

另一种选择是使用Gradle,通过

StackOverflow中的相关问题:

但我更喜欢在Maven或Gradle之前使用SBT,这样就不会引入Scala之外的另一种语言

除了使用Tycho(Eclipse插件)的项目外,SBT中是否可能有所有项目?。Eclipse插件项目是主项目的一个依赖项,它很少更改

有什么想法吗

更新1:其他信息。Eclipse插件使用这种格式来处理依赖项,而不是用于Gradle、Maven、Ivy和SBT的标准Maven存储库。这就是为什么需要特殊工具的原因。我的定制Eclipse插件有100多个间接p2依赖项

更新2

我的Eclipse插件的
pom.xml

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
    <groupId>myCompany</groupId>
  <artifactId>myPlugin</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  <packaging>eclipse-plugin</packaging>
  <properties>
    <tycho.version>0.19.0</tycho.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <repositories>
    <repository>
      <id>eclipse</id>
      <url>http://download.eclipse.org/releases/kepler</url>
      <layout>p2</layout>
    </repository>
    <repository>
      <id>babel</id>
      <url>http://download.eclipse.org/technology/babel/update-site/R0.11.1/kepler</url>
      <layout>p2</layout>
    </repository>
    <repository>
      <id>logback</id>
      <url>http://logback.qos.ch/p2/</url>
      <layout>p2</layout>
    </repository>
  </repositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-maven-plugin</artifactId>
        <version>${tycho.version}</version>
        <extensions>true</extensions>
      </plugin>

      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>target-platform-configuration</artifactId>
        <version>${tycho.version}</version>
        <configuration>
      <resolver>p2</resolver>
      <environments>
              <environment>
                <os>linux</os>
                <ws>gtk</ws>
                <arch>x86_64</arch>
              </environment>
              <environment>
                <os>win32</os>
                <ws>win32</ws>
                <arch>x86</arch>
              </environment>
      </environments>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

4.0.0
我的公司
我的插件
1.0.0-SNAPSHOT
eclipse插件
0.19.0
UTF-8
日食
http://download.eclipse.org/releases/kepler
p2
巴别塔
http://download.eclipse.org/technology/babel/update-site/R0.11.1/kepler
p2
倒退
http://logback.qos.ch/p2/
p2
org.eclipse.tycho
tycho maven插件
${tycho.version}
真的
org.eclipse.tycho
目标平台配置
${tycho.version}
p2
linux
gtk
x86_64
win32
win32
x86
看来。然而,这并不意味着解析器可以直接在sbt中使用(我以前从未读过它,也从未见过它在使用中,所以我可能弄错了)

有一种方法可以在sbt中包含任何常春藤分解器,使用:

创建Maven(
pom.xml
)或Ivy的配置文件 (
ivy.xml
和可选的
ivysettings.xml
)。外部配置是 通过使用以下表达式之一选择

externalvysettings
externalvyfile

我的猜测是,利用这些支持,您可能会非常成功。只需将
externalIvySettings
和/或
externalIvyFile
添加到
build.sbt
,并在Eclipse插件项目的顶级目录中创建
ivy.xml
,并声明为

您可能希望通过以下
build.sbt
来探索支持:

externalIvySettings()

libraryDependencies += "bundle" % "org.eclipse.swt.cocoa.macosx.x86_64" % "3.100.1.v4234e"
<ivysettings>
  <settings defaultResolver="chain"/>
  <resolvers>
    <chain name="chain">
      <ibiblio name="central" m2compatible="true"/>
      <updatesite name="eclipse-juno" url="http://download.eclipse.org/releases/juno" />
    </chain>
  </resolvers>
</ivysettings>
ivysettings.xml
放在项目的顶级目录中(与
build.sbt
一起):

另一个解决方案(我还没有尝试过)是使用插件,专门为此设计。它是积极的

我会用我的经验更新这个答案

更新:第一次尝试时它对我不起作用


最终的解决方案是为Birt插件使用标准的Maven存储库。此解决方案适合嵌入Birt运行时,但不适合完整的RCP应用程序。

您能否详细说明“也许我可以用Maven构建Eclipse插件,用SBT构建其他项目。但不知道这是否可行。”?在项目中使用Maven和在其他项目中使用sbt确实是可能的。是否还要保留目录结构?结构应该是什么样子?如果需要,目录结构可以更改。其他项目何时需要Eclipse插件项目?它们之间的关系如何?有一个主要项目和几个卫星项目。其中一个是Eclipse插件,它为EclipseBirt提供定制数据。主项目使用与卫星项目相同的Eclipse Birt插件。因此,使用定制Eclipse插件的可传递依赖项,带来了所有需要的Birt依赖项。问题是Eclipse插件使用定制的存储库布局:“p2”而不是标准的Maven布局。啊,那么真正的问题是p2存储库布局吗?那是什么?谢谢你,杰克。当我有时间的时候,我会试着告诉你。那太棒了,因为这个地区没有太多的探索(而且因为我是新手,我会感谢任何帮助)。谢谢它不工作,我收到
java.lang.ArrayIndexOutOfBoundsException:0
位于
org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:336)
。我喜欢这个解决方案,因为它很简单。您使用的是什么sbt版本?由于这个问题在Ivy中突然出现,它与您使用的版本有关。Ivy团队已经解决了我的这个错误,但我尝试使用SBT的正确版本,它太新了,并且发生了一些API更改。虽然这个链接可能回答了这个问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。请编辑并在答案中放置插件的名称。如果URL发生变化,可以用谷歌搜索。
> update
[info] Updating {file:/Users/jacek/sandbox/eclipse-p2/}eclipse-p2...
:: loading settings :: file = /Users/jacek/sandbox/eclipse-p2/ivysettings.xml
[warn]  module not found: package#org.eclipse.swt.accessibility2;[0.0.0,)
[warn] ==== central: tried
[warn]   http://repo1.maven.org/maven2/package/org.eclipse.swt.accessibility2/[revision]/org.eclipse.swt.accessibility2-[revision].pom
[warn]   -- artifact package#org.eclipse.swt.accessibility2;[0.0.0,)!org.eclipse.swt.accessibility2.jar:
[warn]   http://repo1.maven.org/maven2/package/org.eclipse.swt.accessibility2/[revision]/org.eclipse.swt.accessibility2-[revision].jar
[warn] ==== eclipse-juno: tried
[warn]  module not found: package#org.mozilla.xpcom;[0.0.0,)
[warn] ==== central: tried
[warn]   http://repo1.maven.org/maven2/package/org.mozilla.xpcom/[revision]/org.mozilla.xpcom-[revision].pom
[warn]   -- artifact package#org.mozilla.xpcom;[0.0.0,)!org.mozilla.xpcom.jar:
[warn]   http://repo1.maven.org/maven2/package/org.mozilla.xpcom/[revision]/org.mozilla.xpcom-[revision].jar
[warn] ==== eclipse-juno: tried
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: package#org.eclipse.swt.accessibility2;[0.0.0,): not found
[warn]  :: package#org.mozilla.xpcom;[0.0.0,): not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]  Note: Unresolved dependencies path:
[warn]      package:org.eclipse.swt.accessibility2:[0.0.0,)
[warn]        +- bundle:org.eclipse.swt:[3.0.0,4.0.0)
[warn]        +- bundle:org.eclipse.swt.cocoa.macosx.x86_64:3.100.1.v4234e (/Users/jacek/sandbox/eclipse-p2/build.sbt#L3-4)
[warn]        +- default:eclipse-p2_2.10:0.1-SNAPSHOT
[warn]      package:org.mozilla.xpcom:[0.0.0,)
[warn]        +- bundle:org.eclipse.swt:[3.0.0,4.0.0)
[warn]        +- bundle:org.eclipse.swt.cocoa.macosx.x86_64:3.100.1.v4234e (/Users/jacek/sandbox/eclipse-p2/build.sbt#L3-4)
[warn]        +- default:eclipse-p2_2.10:0.1-SNAPSHOT