分类: Eclipse Coding

  • eclipse启动时间统计插件

    eclipse启动时间统计插件

    在项目的开发过程中,遇到过一个场景,需要编写一个eclipse插件来实现代码扫描check特定的架构层级逻辑。

    本文主要讲解演示如何使用eclipse做一个简单的eclipse启动时间的插件(此例子《深入理解java虚拟机》中亦提到过)。

    步骤如下

    一、创建一个Plug-in Project(File –> New –> Plug-in Project)

    二、至此,插件工程已经创建完毕,结构如下。并新建一个CountStartTime类

    三、CountStartTime类实现IStartup接口,代码如下:

    package cn.li.countstarttime.handlers;

    import org.eclipse.jface.dialogs.MessageDialog;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.ui.IStartup;

    public class CountStartTime implements IStartup {

    @Override
    public void earlyStartup() {
    Display.getDefault().syncExec(new Runnable() {
    public void run() {
    // 获取eclipse启动的时间
    long eclipseStartTime = Long.parseLong(System.getProperty(“eclipse.startTime”));
    // 获取系统当前的时间
    long costTime = System.currentTimeMillis() – eclipseStartTime;
    Shell shell = Display.getDefault().getActiveShell();
    String message = “Eclipse启动时间为 ” + costTime + “ms”;
    MessageDialog.openInformation(shell, “Information”, message);
    }
    });
    }

    }
    四、编辑plufin.xml文件


    五、测试一波

    Run As –> Eclipse Application

    六、右键工程,Export

    next后选择路径

    导出的jar包

    七、将Jar包复制到eclipse/plugins目录下,再次启动eclipse

  • Eclipse替代Keil MDK代码开发过程

    Eclipse替代Keil MDK代码开发过程

    最近有空的时候会玩玩stm32,但是在使用Keil MDK这个IDE编辑代码的时候,总给人一种很不爽的感觉。比如,无法查看函数的调用关系,缺少Outline预览,无法编辑代码块等等,也完全没有代码重构方面的支持。在代码编辑方面的功能,Keil是远远落后于eclipse和VS Code这类IDE的,因此,使用Keil时,代码编辑的便捷程度有所下降,码代码的效率自然也下来了。

    由于日常使用eclipse的频率较高,脑子里的第一想法就是将keil的编辑环境迁移到eclipse上来。当然,所谓的编辑,不单只代码编辑,最少还要能够编译代码。否则,代码编译还要继续回到MDK环境上完成的话,也挺折磨人的。所以搭建环境的目标是代码编辑+代码编译在eclipse上完成。

    首先,在eclipse上搭建工程。第一步使用eclipse工程创建菜单创建工程,步骤如图:

    下一步然后输入项目名称,选择keil工程所在的路径。

    最后是加入keil 编译器相关的标准库头文件路径,代码编辑的需求就基本实现了,方法如下图所示。

    好了,通过以上配置,已经可以在eclipse上愉快地编辑代码了

  • Eclipse中编译调试ElasticSearch源码

    对于想深入学习ES的人来说,编译源码,从而方便的进行阅读、调试是必不可少的。这方面的文章也不少,我尝试过几个,但多多少少都碰到了一些问题。最后参考官方的一篇博客编译成功了,可以正常的调试代码,且步骤简单。这里我简单总结并扩展一下,也支持Eclipse,并说明一下实际操作中要注意的细节。

    关于JDK版本

    ES是Java开发的,所以编译的时候肯定是需要JDK的。但需要注意,ES运行所需的JDK版本和编译所需的JDK版本要求是不一样的。运行ES,一般JDK 1.8(Java 8)就可以了(而且推荐该版本),而且从ES 7.0版本开始,默认下载的安装包里面已经集成了JDK。但是编译ES可不行,我编译ES 6.4版本的时候,需要的JDK版本是10,编译6.6版本的时候,需要的JDK版本已经是11了。所以,编译时所需要的JDK版本取决于你想编译的ES版本,源码根目录的CONTRIBUTING.md文件中贡献代码部分一般会指出编译所需的JDK版本(并且还有很多其它有价值的信息,比如如何使用Eclipse或者IDEA进行源码开发、编译、调试,建议看一下)。另外如果JDK版本不对,编译的时候会有错误信息提示。反正编译完之后,我的电脑上面现在已经装了JDK 1.8、JDK 9、JDK 10、JDK 11四个版本了,需要哪个用哪个。

    这里以原文中的ES 6.6版本为例进行说明。ES 6.6版本编译依赖于JDK 11(必须),另外有些代码模块依赖于JDK 9,但这部分代码非必须,所以建议也安装好JDK 9,并为其设置环境变量JAVA9_HOME,编译时会通过该环境变量找JDK 9. 但JDK 9并非强制,如果你没有,编译的时候也不会报错,只会出几个警告。

    最后贴上我的JDK环境变量的配置:

    export JAVA8_HOME=$(/usr/libexec/java_home -v 1.8)  # 可选。如果是Linux或者Windows,将命令换为JDK的真实路径export JAVA9_HOME=$(/usr/libexec/java_home -v 9)  # 可选export JAVA10_HOME=$(/usr/libexec/java_home -v 10)   # 可选export JAVA11_HOME=$(/usr/libexec/java_home -v 11)  # 必须export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin// 运行的时候使用Java 8(ES会读取该环境变量)export RUNTIME_JAVA_HOME=$JAVA8_HOME    # 可选

    编译

    1. 下载源码(这一步对于网络不好的人会很漫长),然后切换到自己想要的分支,这里使用6.6分支:git clone https://github.com/elastic/elasticsearch.git
      cd elasticsearch
      git checkout --track origin/6.6
    2. 生成IDE所需要的文件:// Eclipse
      ./gradlew eclipse

      // IDEA
      ./gradlew idea
    3. 把代码导入到Eclipse或者IDEA中:// Eclipse
      File: Import: Existing Projects into Workspace -> 选择ES源码目录
      -> Search for nested projects

      // IDEA
      File->New Project From Existing Sources -> 选择ES源码目录
      -> Import project from external model->Gradle
      导入后,会自动开始编译,这又是一个很漫长的过程。这里可以做一点优化,修改一下根目录下的build.gradle文件:// common maven publishing configuration
      allprojects {
      group = 'org.elasticsearch'
      version = VersionProperties.elasticsearch
      description = "Elasticsearch subproject ${project.path}"

      // 增加下面部分
      repositories {
      google()
      jcenter()
      // maven库
      def cn = "http://maven.aliyun.com/nexus/content/groups/public/"
      def abroad = "http://central.maven.org/maven2/"
      // 先从url中下载jar若没有找到,则在artifactUrls中寻找
      maven {
      url cn
      artifactUrls abroad
      }
      }
      }
    4. 启动调试,以下命令会启动一个ElasticSearch实例,并且支持远程调试:./gradlew run --debug-jvm启动的ES实例的配置、数据等在<源码根目录>/distribution/build目录。该命令执行后,会有一个短暂的编译过程,输出如下:~/Elastic/ES/source/elasticsearch(6.6*) » ./gradlew run --debug-jvm
      Starting a Gradle Daemon (subsequent builds will be faster)

      > Configure project :benchmarks
      =======================================
      Elasticsearch Build Hamster says Hello!
      Gradle Version : 5.1.1
      OS Info : Mac OS X 10.14.6 (x86_64)
      JDK Version : 11 (Oracle Corporation 11.0.3 [Java HotSpot(TM) 64-Bit Server VM 11.0.3+12-LTS])
      JAVA_HOME : /Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
      Random Testing Seed : 416BC82E9B34077D
      [elasticsearch] Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

      > Task :distribution:run#start
      Running elasticsearch in debug mode, suspending until connected on port 8000

      [elasticsearch] Listening for transport dt_socket at address: 8000
      <============-> 98% EXECUTING [2m 49s]
      > :distribution:run#start
      看到这个输出后,对于IDEA,从菜单中选择:Run->Attach to Process…,选择类似这样的进程:” node0/elasticsearch-<版本>/data (8000)“。ES的启动类是org.elasticsearch.bootstrap.Elasticsearch,可在其main函数中打个断点,这样就能停住程序了。

    其实整个环境搭建过程在ES源码目录下的CONTRIBUTING.mdTESTING.asciidoc文件中都已经说得很细了,以前就觉得elastic公司的产品文档写的非常好,比如ElasticSearch、Filebeat、Logstash等产品,现在看来,源码的文档也是非常棒,值得学习。

  • eclipse集成Java性能分析神器JProfiler

    eclipse集成Java性能分析神器JProfiler

    JProfiler是一款功能强大的Java开发分析工具,能帮助从事编程工作的朋友们分析你们的代码数据,确定内存泄漏并了解线程问题。

    1、下载JProfiler

    https://www.ej-technologies.com/download/jprofiler/files

    可以根据系统位数选择具体版本的JProfiler

    2、安装JProfiler

    下载绿色版本JProfiler

    3、启动JProfiler

    因为JProfiler是一个商业软件,所以只能免费试用10天,但是10天分析一个生产宕机问题已经绰绰有余了。

    启动页

    输入license页,选择免费试用10天

    选择IDE,根据具体IDE选择

    选择成功

    配置成功,结束

    打开主界面

    4、启动eclipse,在Eclipse里配置JProfiler

    点击Windows->Perspective->Customize Perspective->Command Groups Availability,找到Profile,选中它,再点击OK即可。

    5、如何使用在Eclipse中使用Profiler

    编写类

    import java.util.ArrayList;
    import java.util.List;

    public class Test {

    static class TestBean{
        public TestBean() {
        }
    }
    
    public static void main(String[] args) {
        System.out.println("test JProfiler start");
    
        try {
            Thread.sleep(1000 * 10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        List list = new ArrayList();
        for(int i=0; i<100000; i++){
            Test.TestBean tt = new Test.TestBean();
            list.add(tt);
            try {
                Thread.sleep(1000 * 10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        System.out.println("test JProfiler end");
    }

    }
    启动程序

    此时控制台会输出

    JProfiler> Protocol version 61
    JProfiler> JVMTI version 1.1 detected.
    JProfiler> Java 8 detected.
    JProfiler> 32-bit library
    JProfiler> Listening on port: 33673.
    JProfiler> Enabling native methods instrumentation.
    JProfiler> Can retransform classes.
    JProfiler> Can retransform any class.
    JProfiler> Native library initialized
    JProfiler> VM initialized
    JProfiler> Waiting for a connection from the JProfiler GUI …
    JProfiler> Using instrumentation
    JProfiler> Time measurement: elapsed time
    JProfiler> CPU profiling enabled
    test JProfiler start
    test JProfiler end
    程序会打开你安装的JProfile并提示

    监控主页面

  • Eclipse集成testng插件(离线安装方式)

    Eclipse集成testng插件(离线安装方式)

    testng是一个优秀的测试框架,我们在开发自动化测试脚本或者框架的时候经常会用到这个框架。

    它不仅能方便的帮助我们管理测试类,而且它还提供了丰富的注解来支持各种测试场景的实现(参数化,数据提供者,分组测试,依赖测试,忽略测试,超时测试……)。

    eclipse中编写了测试类,如果我们想以“TestNG test”来执行,

    如下图,则必须先集成testng插件。这里推荐离线安装方式,速度快,简单,在线安装很慢。

    离线安装步骤:

    1、下载eclipse-testng的插件包,

    2、解压插件包

    3、将features下

    org.testng.eclipse_6.9.8.201510130443.rar包解压,解压后的同名目录放到eclipse的futures目录。

    4、将plugins下

    org.testng.eclipse_6.9.8.201510130443.rar包解压,解压后的同名目录放到eclipse的plugins目录。

    5、重启eclipse。

    6、验证:Window-》Preferences-》TestNG

    如果能够看到TestNG菜单,则说明插件集成成功,否则请检查上面的每一个步骤是否到位。

  • eclipse svn同步过滤掉某些不需要同步的文件

    eclipse svn同步过滤掉某些不需要同步的文件

    注:这里说的svn是eclipse里svn插件

    默认情况下,我们在点击svn同步时,总是会把一些不需要的目录和文件也给同步了,这样我觉得很晃眼睛,所以在这里说下怎么去去掉不想同步的文件

    1.默认同步下的情况,如下图

    2.设置过滤掉不想同步的文件target .project .settings .classpath等等这些文件

    方法一:打开:window–>preferences–>team–>Ignored Resource–>Add Pattern (添加完后点击apply和ok按钮就行了)

    方法二:右键项目-Team-显示属性,然后按如下的方式进行添加这些就可以了

    3.通过以上两种方法配置后,再次同步就可以过滤掉不想同步的那些文件了

  • 几款国产 Eclipse 插件

    几款国产 Eclipse 插件

    1、项目名称:Eclipse SmartQQ 插件

    项目简介: Eclipse 上的 SmartQQ 插件,防 Boss 利器,让你可以在 eclipse 中使用 QQ 进行聊天。

    特色功能:

    热键设定

    一键关闭

    2、项目名称:Eclipse 代码笔记插件 Eclick

    项目简介: Eclipse 的缺点当然也是大多数IDE的缺点就是,其不具有操作持久化,也就是说将操作存储起来,很多经验操作的经验没有保存,其经验也得不到分享,自己也忘记,团队更不知道。

    程序员在工作的时候大都是这样一个状态:查找以前的代码复制过来,进行修改,绝大部分时间是在想曾经做过的在哪儿然后去点开一个个文件夹然后粘贴过来然后修改,永远重复着。所以,将自己的经验或别人的经验直接用搜索超链接的形式保存在一个类似 HTML 的文件中非常合适,并且 HTML 人人都会编辑,还可以以丰富的网页形式保存经验搜索超链接。

    3、项目名称:Eclipse 增量包插件

    项目简介: 该 Eclipse 插件用于Java 或 Java Web 项目打增量包或补丁。 维护传统 Java 或 Java Web 项目时,打全量包很危险,所以打增量包是个合理的需求, 但现在网上搜不到好用的增量包插件,东软有个 Auto Checker,但N年没更新了,还有不能打内部类的 bug,所以只好自己开发一个了。 但好东西总要分享出来的哈。

    4、项目名称: Eclipse Velocity 模板插件

    项目简介: 在Eclipse下编辑Velocity模板的插件,支持语法着色,代码向导等功能,简单好用,没有可视化编辑。

    5、项目名称:Eclipse FTP 插件

    项目简介: 基于 Elipse 3.5.0 版本的简易 FTP上传插件,其特色功能如下:

    选择文件,右键就可上传到 FTP 服务器。

    提供可配置站点服务器。

    上传进度展现。

    6、项目名称:Eclipse 生成代码插件 Jmr

    项目简介: Jmr 是一款基于模型驱动开发,根据自己的项目和框架编写模板,生成代码的 Eclipse 插件。模板类似 Jsp 语法,学习成本低,并且扩展了实用的标签库。任何类型的代码,测试用例、文档均可生成;可以把数据库、Java 类、Xml 转换成模型,也可以使用自定义 Action;模型和变量会传给模板用于生成。完善的生成任务管理;任何项目、框架都可以集成,不需要改变项目结构。

    7、项目名称:码云 Eclipse 插件 Eclipse-OSCGit

    项目简介: 通过应用市场安装搜索 oschinagit,update site 安装。安装完成之后,在导航栏中可以看到码云的logo图标,点击之后在弹出的窗口中输入码云的账号密码即可。

  • import某个java项目到MyEclipse中出现isEmpty()未定义的原因

    import某个java项目到MyEclipse中出现isEmpty()未定义的原因

    其实这个原因很简单,因为你从外部导入的项目的JDK是1.6的,而String :: isEmpty()只有jdk1.6才有,所以你要把你的java Complier改成1.6或6.0,具体做法
    点击项目->点击java Complier ->把 compiler complance level改成1.6就行了。

  • MyEclipse导入项目中出现乱码情况

    MyEclipse导入项目中出现乱码情况

    ​​导入项目前,我在压缩包里打开webroot下src里的.java源文件中的汉字不出现乱码,可是导入到MyEclipse中后,进入webroot下src查看.java源文件,里面的汉字全变成乱码

    解决办法: MyEclipse改变项目的编码方式:右键单击项目名称->Properties->Resource->Text file encoding,选择项目的编码方式。

    MyEclipse改变各种文件的默认编码方式:Window->Preferences->General->Content Types->比如选中右边的JSP,窗口下面则出现Default encoding,在右边修改该文件默认的编码方式即可

  • eclipse 中的动态Web 项目与 Myeclipse 中的web项目有何区别

    eclipse 中的动态Web 项目与 Myeclipse 中的web项目有何区别?

    要弄清两者的区别,首先要弄清eclipse与Myeclipse的区别

    eclipse是一个开源的项目,可以用于多种的语言的开发,只要你安装好它的插件就可以,【myeclipse就是eclipse的插件】,用java的web项目开发,在myeclipse的早些版本里,它是要先安装了eclipse才能够安装myeclipse的,但是最近的版本就把eclipse集成进来了
    eclipse不装myeclipse照样可以做web开发,很多插件可以替代myeclipse,myeclipse只是个做的比较全,比较好的一个插件。

    myeclipse是基于eclipse的一个开发工具,它整合了一些插件并作了一些自己的开发。
    使用myeclipse开发j2ee程序会更加方便些。但它不是免费的,不过费用不是很高

    Eclipse是开发必要的IDE,Myeclipse是非必要的插件

    dynamic web project是Eclipse自带的分类,web project是Myeclipse扩展后的项目