2014-09-25 54 views
4

我有一套我想遷移到SBT的Maven項目。如何依賴Eclipse Birt構建Eclipse插件項目?

只有一件事情阻止我這樣做,這是一個Eclipse插件項目,它依賴於Eclipse Birt。

對於Maven,Tycho plugin處理所有依賴關係。該工具在SBT中不可用。我發現了用於SBT的sbt-tycho插件,但它看起來像無人維護(3年沒有活動)。

也許我可以使用Maven構建我的Eclipse插件,並使用SBT構建其餘的項目。但不知道這是否可能。

另一種選擇是使用Gradle,通過the wuff plugin

相關問題在StackOverflow上:

不過我的Maven或搖籃前喜歡SBT,爲了不引入另一種語言,除了斯卡拉。

除了使用Tycho(Eclipse插件)之外,是否可以在SBT中擁有所有項目? Eclipse插件項目是主項目的依賴項,並且很少更改。

任何想法?

更新1:附加信息。 Eclipse插件使用p2 repository格式來處理依賴關係,而不是用於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> 
+0

您可以詳細說明*「也許我可以使用Maven構建我的Eclipse插件,其餘的項目使用SBT,但不知道這是否可行。在項目中使用Maven並且在其他項目中使用Maven確實是可能的。你想保持目錄結構嗎?結構應該如何? – 2014-10-08 06:51:14

+0

如果需要,可以更改目錄結構。 – 2014-10-08 08:53:26

+0

何時需要其他項目的Eclipse插件項目?他們如何相互關聯? – 2014-10-08 19:41:00

回答

2

看來,the support for Eclipse updatesite with OSGi bundles is already available in Ivy。然而,這並不意味着解析器可以直接用於sbt(我從來沒有讀過它並在使用之前看過它,所以我可能會誤會)。

有一種方法,包括使用externalIvySettings()在SBT常春藤任何解析:

創建配置文件,你會Maven的(pom.xml)或常春藤 (ivy.xml和可選ivysettings.xml)。通過使用以下表達式之一選擇外部配置爲 。

Ivy settings (resolver configuration)externalIvySettingsIvy file (dependency configuration)externalIvyFile

我的猜測是,您可能非常成功地利用支持。只需將externalIvySettings和/或externalIvyFile添加到build.sbt,並在Eclipse插件項目的頂級目錄中創建ivy.xml,並聲明Ivy's Eclipse updatesite resolver

您可能想要探索具有以下build.sbt支持:上面我

<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> 

有了兩個文件:

externalIvySettings() 

libraryDependencies += "bundle" % "org.eclipse.swt.cocoa.macosx.x86_64" % "3.100.1.v4234e" 

ivysettings.xml在項目的頂層目錄(旁邊build.sbt)可能update達到一些故障package s:

> 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 
+1

謝謝Jacek。當我有時間時,我會盡力告訴你。 – 2014-10-14 06:30:03

+0

這真是太棒了,因爲這個區域沒有太多探索(而且因爲我是新手,所以我會很感激任何幫助)。謝謝! – 2014-10-14 06:48:16

+0

它不起作用,我在'org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:336)'處收到'java.lang.ArrayIndexOutOfBoundsException:0'。我喜歡這個解決方案,因爲它很簡單。 – 2014-12-23 17:12:56

1

另一個解決方案(我還沒有嘗試過)是使用專門爲此設計的sbt-osgi-manager插件。這是積極的配合。

我會用我的經驗更新這個答案。

UPDATE:它在第一次嘗試中不適用於我。

最終的解決方案是爲Birt插件使用標準的Maven倉庫。該解決方案適用於嵌入Birt運行時,但不適用於完整的RCP應用程序。

+0

雖然此鏈接可能會回答問題,最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – Sentry 2014-12-23 17:53:21

+0

編輯並將答案放在插件的名稱中。如果URL更改,則可以使用Google搜索。 – 2014-12-24 08:34:47