![](/img/trans.png)
[英]Handling transitive dependencies of non-OSGI dependencies in JBoss Fuse
[英]Handling non-OSGi dependencies when integrating Maven, Tycho and Eclipse
我有一堆基於Eclipse的插件,我一直在遷移到Maven / Tycho。 大多數這些插件依賴於我現在通過Maven管理的單獨庫,而不是混淆.jar
文件。
我當前設置中最麻煩的部分是由於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/
target/dependencies
目錄被添加到META-INF/MANIFEST.MF
的Bundle-ClassPath
庫中。
這些設置允許compile
Maven指令來編譯插件。 從VCS導入項目並在Eclipse中手動指定target/dependencies
項目錄作為類文件夾允許所述IDE也編譯插件。
不幸的是,由於以下幾個原因,這是一個相當麻煩的解決方案:
配置maven-dependency-plugin
需要列出應該解壓縮的所有工件。 可以使用unpack-dependencies
而不是unpack
,但這也會解壓所有OSGi依賴項 - 在每個項目目錄中解壓縮一半Eclipse並不是我的樂趣......
在Eclipse中添加類文件夾要求Maven initialize
運行一次,以便創建target/dependencies
錄。
純Maven項目與Eclipse中依賴的Tycho項目之間沒有源連接。 對於從Maven項目傳播到Tycho項目的更改,以便例如Eclipse可能顯示潛在的編譯問題,必須mvn install
Maven項目然后在Tycho項目中運行mvn clean initialize
以刪除先前解壓縮的依賴項和拉入當前設定。 然后你必須刷新Eclipse項目並希望Eclipse做正確的事情。
同樣,從Tycho項目查看依賴關系源將不會顯示主要源文件,而是顯示target/dependencies
可用的任何內容 - 很可能只是一個.class
文件。
我認為必須有一個更合理的方法來解決這個問題 - 這將允許Eclipse和Maven項目更緊密地集成。
那么,我錯過了什么? 這個用例的推薦設置是什么? 還有更好的選擇嗎? 最好是不需要設置一堆Nexus和/或p2存儲庫的東西?
我們似乎采用了類似的策略。 但是,我使用nexus混合存儲庫(同時具有maven和p2)。
<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
您可以使用Embed-Dependency嘗試maven-bundle-plugin。
見http://wiki.eclipse.org/Tycho/How_Tos/Dependency_on_pom-first_artifacts
官方演示效果很好。 但是,我仍然沒有以這種方式使用我的jar文件。
官方演示確實運行良好,並顯示嵌入非OSGI依賴項的方式,或者換句話說,為其他依賴項創建OSGI外觀。
方法確實是手動復制依賴項,使它們成為OSGI清單的一部分並導出感興趣的包。
然而,真正的問題是從Eclipse中執行依賴插件。
即使使用相應的M2E連接器也無法運行,從而阻止了發現和PDE類路徑分辨率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.