簡體   English   中英

在集成Maven,Tycho和Eclipse時處理非OSGi依賴項

[英]Handling non-OSGi dependencies when integrating Maven, Tycho and Eclipse

我有一堆基於Eclipse的插件,我一直在遷移到Maven / Tycho。 大多數這些插件依賴於我現在通過Maven管理的單獨庫,而不是混淆.jar文件。

我當前設置中最麻煩的部分是由於Tycho顯然無法處理僅Maven(即非OSGi)工件。 我目前的設置是這樣的:

  1. 在每個Eclipse插件的pom.xml ,我在initialize階段向maven-dependency-plugin發出unpack目標。 這會將我指定的工件解包到單獨的target/dependencies錄中。

  2. target/dependencies目錄作為輸出目錄添加到build.properties ,以便Tycho可以在編譯時將其添加到類路徑中:

     source.. = src/main/java/ output.. = target/classes/ output.. = target/dependencies/ 
  3. target/dependencies目錄被添加到META-INF/MANIFEST.MFBundle-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)。

  1. 對於解包依賴項,我使用maven-dependency-plugin將它們放在目標/依賴項中(見下文)。
    • 1.1。 copy-dependencies可以在不解包的情況下完成所需的操作。
  2. 您的來源和輸出與我的大致相同。
    • 2.1。 是的,mvn必須初始化目標/依賴項
  3. 我只在MANIFEST中包含所需的罐子,因為1會檢索許多不必要的罐子。
    • 3.1。 我手動選擇相關的罐子。
    • 3.2。 是的,如果非Eclipse管理(maven)項目發生更改(在工作區之外),則必須運行mvn build來更新它們。
    • 3.3。 使這項工作的關鍵是:
      • 3.3.1 將maven和Eclipse項目部署到(快照)存儲庫 我使用http://www.sonatype.org/nexus/ 因此,當您運行maven時,它會查看nexus存儲庫以獲取maven和Eclipse項目的更新。
  4. 其他一些注釋,可能已經很明顯了:
    • 4.1。 pom.xml文件應該只包含非Eclipse jar作為依賴項。 (tycho插件處理所有Eclipse依賴項,應該在您的(nexus)存儲庫中找到它。)
    • 4.2。 將依賴jar添加到Eclipse中的運行時(通過編輯plugin.xml運行時)

Maven插件:

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

示例build.properties

bin.includes = META-INF/,
target/classes/,
plugin.xml,
target/dependency/mongo-java-driver-2.11.3.jar

示例清單(僅限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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM