开发Eclipse插件

最近,我开始与团队合作开发Eclipse插件。 团队开发了一个很棒的插件,可以实现预期的目的。 因此,我签出了源并尝试构建它。 项目源包含所有必需的库,并且只能在Eclipse中构建。 在当今不断交付的世界中,这是一个主要障碍,因为无法在詹金斯上建立这样的项目。 该项目不仅包含必需的库,而且完整的eclipse设置也保留为源代码的一部分,因此我想先进行改进。 我在项目中创建了POM.xml并删除了设置和库。 构建工作正常,但是当我在Eclipse中打开项目时,情况一团糟。 那里什么都没做!

花了一段时间才意识到Eclipse和Maven是两个不容易融合的世界。 甚至最小的东西(如工件版本和Bundle版本)也不会轻易收敛。 在Maven中,任何东西都可以是版本,例如21快照。 但是在日食中有一些标准,它必须命名为[number]。[number]。[number] .qualifier,例如1.1.21.qualifier。

为了弥合两个世界之间的鸿沟,Sonatype已将Tycho贡献给了Eclipse生态系统。 将插件添加到eclipse存储库中:

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

这里有几点要注意:

  • 如果该插件用于特定的Eclipse平台,则应添加该插件的存储库。
  • 该插件可以使用来自POM或MANIFEST.MF的依赖项。 如果从POM使用依赖项,则设置pomDependencies

Tycho插件还带来了一组用于版本更新,surefire测试等的插件。可以单独调用这些插件以执行不同的目标,例如,可以通过以下方式使用版本插件来设置版本:

mvn tycho-versions:set-version -DnewVersion=1.1.1-SNAPSHOT

这将在POM中设置1.1.1-SNAPSHOT版本,在MANIFEST.MF中设置1.1.1.qualifier。

尽管插件提供了很多功能,但也有一些限制。 插件无法为PDE生成正确的日食设置。 因此,如果我们不保留这些设置,则需要再次生成这些设置。 插件页面上没有列出其他限制。

在此之后,我们现在已经能够在某种意义上弥合两个世界。 生成Eclipse插件的Maven构建是可能的。

插件类加载器

在Eclipse PDE中,有插件和片段。 插件是提供功能的完整模块,片段是将自身附加到父插件然后增强其功能的模块。 因此,插件可以附加n个片段,从而在运行时对其进行增强。

我们有一个基础插件,它提供了一些基本功能,并且在其上构建了一个片段以在插件中使用Hadoop1.x。 一段时间后,要求也支持Hadoop2.x。 现在,这两个库彼此不兼容。 因此,需要一些解决方法来启用此功能

幸运的是,基于OSGI的Eclipse与其他Java应用程序相比,具有不同的类加载机制。 通常,只有一个/层次结构类加载器可以加载整个应用程序。 现在,在这种情况下,如果将两个不兼容的jar捆绑在一起,则只会加载一个。 但是在eclipse中,每个插件都有自己的类加载器,可以加载自己的类。 现在,这提供了很多机会,例如支持同一库的不同版本。 此功能仅扩展到插件,而不是片段。 片段没有自己的类加载器,而是使用父插件类加载器。

我们本可以使用插件类加载器支持,但是hadoop库是按片段而不是插件加载的。 我们将片段转换为插件,这需要完成现有代码库的重构任务。 在基于hadoop 1.x的插件形成之后。 我们可以为hadoop 2.x制作更多插件。 每个插件都加载自己的一组类。 现在唯一的要求是拥有更多的PermGem空间,因为无法将完整的插件加载到默认的PermGem空间中。

翻译自: https://www.javacodegeeks.com/2014/07/developing-eclipse-plugins.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react-native 热更新react-native-pushy集成遇到的问题

主要步骤按官方文档实现&#xff0c;这里只记录遇到的一些小坑 官方文档 run-android时NDK报错 前提是NDK已安装并且环境变量已设置 根据报错提示在 android/local.properties文件里加入ndk.dir~/Library/Android/android-ndk-r10e //这里改成你自己的ndk路径 cxxbridge找…

[转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...

[转]在资源管理器中使鼠标右键增加一个命令&#xff0c;运行cmd&#xff0c;同时使得当前路径为资源管理器当前的目录 http://www.cnblogs.com/skywind/archive/2009/05/22/1487138.html 1,找开注册表编辑器&#xff1b; 2,找到HKEY_CLASSES_ROOT\Folder\shell&#xff1b; 3,在…

Keil5 仿真测试出现Cannot Load Flash Device Description 解决方法

1.用ST的烧录软件检测&#xff0c;可以烧录对应的Hex文件。 2.点击魔术棒&#xff0c;Debug选项卡检测芯片型号是否和当前芯片对应 3.在Flash Download选项卡中检查发现没有对应的芯片型号 4.点击Add 选项&#xff0c;选择对应的Flash类型如图&#xff1a; 添加Flash类型后&…

Spring,REST,Ajax和CORS

假设您正在为客户端开发基于JavaScript的项目&#xff0c;并且他通过其余的Web服务向服务器发出Ajax请求&#xff0c;那么您可能会遇到一些麻烦&#xff0c;尤其是如果双方都在单独的域中。 实际上&#xff0c;出于安全原因&#xff0c;未授权从一个域A到另一域B的Ajax请求。 …

位运算实现加减乘除四则运算(Java)

本文是继《一文了解有趣的位运算》的第二篇文章. 我们知道&#xff0c;计算机最基本的操作单元是字节(byte)&#xff0c;一个字节由8个位(bit)组成&#xff0c;一个位只能存储一个0或1&#xff0c;其实也就是高低电平。无论多么复杂的逻辑、庞大的数据、酷炫的界面&#xff0c;…

消息(6)——WCF,构建简单的WCF服务,MTOM编码

构建一个简单的WCF服务。以Web服务类似的步骤由IIS进行宿主服务。建立的步骤&#xff1a;1 新建3.5网站2 添加WCF服务&#xff0c;自动生成契约接口与实现&#xff0c;这里改动一下&#xff0c;添加个字串参数&#xff1a;[ServiceContract]public interface IFirstService{[Op…

Hadoop—MapReducer统计文件的单词出现的个数

1. MapReduce 统计文件的单词出现的个数 Mapper: 处理具体文本&#xff0c;发送结果 Reducer: 合并各个Mapper发送过来的结果 Job: 制定相关配置&#xff0c;框架 Mapper package cn.itcast.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongW…

从框架到平台

当我将近十年前作为Java开发人员开始我的职业生涯时&#xff0c;该行业正在经历革命性的变化。 Spring框架&#xff08;于2003年发布&#xff09;Swift发展起来&#xff0c;并成为庞大的J2EE平台的严重挑战者。 经过过渡时间后&#xff0c;我很快发现自己赞成使用Spring框架而不…

关于setTimeout和setInterval的函数参数问题

今天在写验证码倒计时小demo时&#xff0c;用了如下代码&#xff1a; window.setTimeout(count(num),1000);这样直接使用将使count函数立即执行&#xff0c;并将返回值传递给setTimeout函数作为参数&#xff0c;其结果并不是真正需要的&#xff0c;所以会出现问题。 方法一 …

课堂作业2

1、动手动脑 阅读示例: EnumTest.java&#xff0c;运行它&#xff0c;分析运行结果&#xff1f;你能得到什么结论&#xff1f;你掌握了枚举类型的基本用法了吗&#xff1f; public class EnumTest {public static void main(String[] args) {Size sSize.SMALL;Size tSize.LARGE…

(转)详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页)...

1、怎么使得程序窗口左上角和任务栏有图标&#xff0c;如下图所示&#xff1a; 其实这个问题不应该放到程序打包这部分讲&#xff0c;只不过对于一些初学者而言&#xff0c;在这提下也许会有很大的帮助&#xff08;想到自己刚学.net那会了&#xff0c;呵呵&#xff09;。方法之…

复合双重错误

总览 在上一篇文章中&#xff0c;我概述了为什么BigDecimal大部分时间都不是答案。 虽然可以构造double会产生错误的情况&#xff0c;但在BigDecimal遇到错误的情况下构造情况也一样容易。 BigDecimal更容易正确&#xff0c;但更容易出错。 轶事证据表明&#xff0c;初级开发人…

vue入门学习示例

鄙人一直是用angular框架的&#xff0c;所以顺便比较了一下。 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>vue实践</title>6 <script src"http://cdn.bootcss.…

项目实战报异常Exception及决绝方案

1、报LifecycleException&#xff0c;再配置一下jdk即可&#xff0c;然后再手动添加maven 解决方法&#xff1a; 然后,手动添加jar包 2、maven 项目,右键maven build启动项目的时候&#xff0c;报下面错误&#xff0c;没有在pom配置tomcat7插件 3、报找不到beans插件:更新一下项…

世界主要遥感卫星

世界主要遥感卫星QuickbirdSpot-4Spot-4法国“太阳神”1A神舟飞船神舟飞船“哈勃”望远镜RADASAT神舟飞船国际空间站国际空间站 SPOT2Shutsacn IKONOS CBERS-1JersSpot-4 “哈勃”望远镜 CBERS-1 Landsat 5美国“KH-11”侦察卫星 Spot-5 ERS Landsat 7OrbView-3 美国间谍卫星…

VMware配置linux网络步骤

1.我们要用桥接网络模式 2.设置桥接网络&#xff0c;VMnet1或者VMnet0就是桥接网络&#xff0c;我们用的就是桥接 VMnet8是NAT 在上面的图配置好ip和dns&#xff0c;要与windowss是同一个网段&#xff0c;网关一般不设置 3.设置linux网络里面设置这4项&#xff0c;记住dns可以不…

使用IntelliJ书签

这是有关IntelliJ的精美书签功能的快速帖子。 IntelliJ使您可以为单行代码添加书签。 将某行添加为书签后&#xff0c;您可以使用多种方法直接跳回到该行。 因此&#xff0c;最好在您经常使用的代码位置添加书签。 要创建一个新书签&#xff0c;只需在代码编辑器中按F11键。 …

用js写水仙花数

...js//输入一个三位数&#xff0c;水仙花数就是个位的三次方 十为的三次方 百位的三次方之和等于本身console.log(请输入一个三位数&#xff1a;);let a readline.question();if (a > 100 && a < 999) {if (parseInt(a / 100) ** 3 parseInt(a % 100 / 10) ** …

keras 打印模型图

keras中可以使用 from keras.utils import plot_model plot_model(model,to_filemodel_auth.png,show_shapesTrue) #show_shapesTrue可以把输入输出的shape一起打印 注意&#xff0c;最好是给每个层命名&#xff0c;命名好之后打印出来的才会带名字。程序运行的时候也有一定的指…

C# -- 多线程向同一文件写入

1. 多线程向同一文件写入Log. public delegate void AsyncLog(string str1, string str2);private void Test() {Console.WriteLine("Test Start...");for (int i 0; i < 100; i){AsyncLog asyLog1 new AsyncLog(WriteLog);asyLog1.BeginInvoke("EventActi…