开发Eclipse插件
最近,我開始與團(tuán)隊(duì)合作開發(fā)Eclipse插件。 團(tuán)隊(duì)開發(fā)了一個(gè)很棒的插件,可以實(shí)現(xiàn)預(yù)期的目的。 因此,我簽出了源并嘗試構(gòu)建它。 項(xiàng)目源包含所有必需的庫,并且只能在Eclipse中構(gòu)建。 在當(dāng)今不斷交付的世界中,這是一個(gè)主要障礙,因?yàn)闊o法在詹金斯上建立這樣的項(xiàng)目。 該項(xiàng)目不僅包含必需的庫,而且完整的eclipse設(shè)置也保留為源代碼的一部分,因此我想先進(jìn)行改進(jìn)。 我在項(xiàng)目中創(chuàng)建了POM.xml并刪除了設(shè)置和庫。 構(gòu)建工作正常,但是當(dāng)我在Eclipse中打開項(xiàng)目時(shí),情況一團(tuán)糟。 那里什么都沒做!
花了一段時(shí)間才意識(shí)到Eclipse和Maven是兩個(gè)不容易融合的世界。 甚至最小的東西(如工件版本和Bundle版本)也不會(huì)輕易收斂。 在Maven中,任何東西都可以是版本,例如21快照。 但是在日食中有一些標(biāo)準(zhǔn),它必須命名為[number]。[number]。[number] .qualifier,例如1.1.21.qualifier。
為了彌合兩個(gè)世界之間的鴻溝,Sonatype已將Tycho貢獻(xiàn)給了Eclipse生態(tài)系統(tǒng)。 將插件添加到eclipse存儲(chǔ)庫中:
<repository> <id>juno</id> <layout>p2</layout> <url>http://download.eclipse.org/releases/juno</url> </repository><plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-versions-plugin</artifactId> <version>0.18.1</version> </plugin><plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>target-platform-configuration</artifactId> <version>0.18.1</version> <configuration> <pomDependencies>consider</pomDependencies> <environments> <environment> <os>linux</os> <ws>gtk</ws> <arch>x86_64</arch> </environment> </environments> </configuration> </plugin>這里有幾點(diǎn)要注意:
- 如果該插件用于特定的Eclipse平臺(tái),則應(yīng)添加該插件的存儲(chǔ)庫。
- 該插件可以使用來自POM或MANIFEST.MF的依賴項(xiàng)。 如果從POM使用依賴項(xiàng),則設(shè)置pomDependencies
Tycho插件還帶來了一組用于版本更新,surefire測試等的插件。可以單獨(dú)調(diào)用這些插件以執(zhí)行不同的目標(biāo),例如,可以通過以下方式使用版本插件來設(shè)置版本:
mvn tycho-versions:set-version -DnewVersion=1.1.1-SNAPSHOT這將在POM中設(shè)置1.1.1-SNAPSHOT版本,在MANIFEST.MF中設(shè)置1.1.1.qualifier。
盡管插件提供了很多功能,但也有一些限制。 插件無法為PDE生成正確的日食設(shè)置。 因此,如果我們不保留這些設(shè)置,則需要再次生成這些設(shè)置。 插件頁面上沒有列出其他限制。
在此之后,我們現(xiàn)在已經(jīng)能夠在某種意義上彌合兩個(gè)世界。 生成Eclipse插件的Maven構(gòu)建是可能的。
插件類加載器
在Eclipse PDE中,有插件和片段。 插件是提供功能的完整模塊,片段是將自身附加到父插件然后增強(qiáng)其功能的模塊。 因此,插件可以附加n個(gè)片段,從而在運(yùn)行時(shí)對其進(jìn)行增強(qiáng)。
我們有一個(gè)基礎(chǔ)插件,它提供了一些基本功能,并且在其上構(gòu)建了一個(gè)片段以在插件中使用Hadoop1.x。 一段時(shí)間后,要求也支持Hadoop2.x。 現(xiàn)在,這兩個(gè)庫彼此不兼容。 因此,需要一些解決方法來啟用此功能
幸運(yùn)的是,基于OSGI的Eclipse與其他Java應(yīng)用程序相比,具有不同的類加載機(jī)制。 通常,只有一個(gè)/層次結(jié)構(gòu)類加載器可以加載整個(gè)應(yīng)用程序。 現(xiàn)在,在這種情況下,如果將兩個(gè)不兼容的jar捆綁在一起,則只會(huì)加載一個(gè)。 但是在eclipse中,每個(gè)插件都有自己的類加載器,可以加載自己的類。 現(xiàn)在,這提供了很多機(jī)會(huì),例如支持同一庫的不同版本。 此功能僅擴(kuò)展到插件,而不是片段。 片段沒有自己的類加載器,而是使用父插件類加載器。
我們本可以使用插件類加載器支持,但是hadoop庫是按片段而不是插件加載的。 我們將片段轉(zhuǎn)換為插件,這需要完成現(xiàn)有代碼庫的重構(gòu)任務(wù)。 在基于hadoop 1.x的插件形成之后。 我們可以為hadoop 2.x制作更多插件。 每個(gè)插件都加載自己的一組類。 現(xiàn)在唯一的要求是擁有更多的PermGem空間,因?yàn)闊o法將完整的插件加載到默認(rèn)的PermGem空間中。
翻譯自: https://www.javacodegeeks.com/2014/07/developing-eclipse-plugins.html
總結(jié)
以上是生活随笔為你收集整理的开发Eclipse插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux占用cpu过高排查(linux
- 下一篇: 免费测试ddos网页端口号(免费测试dd