我有一组Maven项目,我想迁移到SBT。
只有阻止我这样做的事情,这是一个Eclipse插件的项目,它与Eclipse Birt有依赖关系。
Maven的Tycho plugin处理所有依赖项。此工具在SBT中不可用。我为SBT找到了sbt-tycho插件,但看起来没有维护(3年无活动)。
也许我可以使用Maven构建我的Eclipse插件,并使用SBT构建其他项目。但不知道这是否可能。
其他替代方法是使用Gradle,通过the wuff plugin。
StackOverflow中的相关问题:
但我更喜欢在Maven或Gradle之前使用SBT,以便除了Scala之外不再引入另一种语言。
除了使用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 :(得分:2)
似乎是the support for Eclipse updatesite with OSGi bundles is already available in Ivy。然而,这并不意味着解析器可以直接在sbt中使用(我从来没有读过它并且之前看过它,所以我可能会弄错)。
有一种方法可以使用externalIvySettings()在sbt中包含任何常春藤解析器:
像Maven(
pom.xml
)或Ivy一样创建配置文件 (ivy.xml
和可选ivysettings.xml
)。外部配置是 通过使用以下表达式之一进行选择。
externalIvySettings
Ivy settings (resolver configuration)和Ivy file (dependency configuration) externalIvyFile
。
我的猜测是你可能会非常成功地利用这种支持。只需将externalIvySettings
和/或externalIvyFile
添加到build.sbt
,然后在Eclipse插件项目的顶级目录中创建ivy.xml
,声明为{{ 3}}
您可能希望通过以下build.sbt
探索支持:
externalIvySettings()
libraryDependencies += "bundle" % "org.eclipse.swt.cocoa.macosx.x86_64" % "3.100.1.v4234e"
将ivysettings.xml
放入项目的顶级目录(与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>
上面有两个文件我可以update
在某些package
上失败:
> 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 :(得分:1)
另一个解决方案(我还没有尝试过)是使用专为此目的而设计的sbt-osgi-manager插件。它是活跃的。
我会根据自己的经验更新这个答案。
更新:第一次尝试时它对我不起作用。
最终的解决方案是使用Birt插件的标准Maven存储库。此解决方案适用于嵌入Birt运行时,但不适用于完整的RCP应用程序。