<?xml version="1.0" encoding="utf-8"?> 用Emacs进行Java开发

用Emacs进行Java开发

Table of Contents

  • 1. 效果(Ensime做后端,使用JavaFx开发界面)
  • 2. Java开发的IDE
    • 2.1. Eclipse和IntelliJ IDEA
  • 3. Java开发的构建工具
    • 3.1. Ant
    • 3.2. Maven
    • 3.3. Gradle
  • 4. 既有IDE,何需构建工具?
  • 5. 使用Maven进行Java开发
  • 6. 使用Gradle进行Java开发
    • 6.1. Gradle基础入门
    • 6.2. Eclipse中使用Gradle
    • 6.3. Emacs中的Gradle集成
  • 7. 使用sbt进行Scala/Java开发
    • 7.1. 安装
    • 7.2. 在sbt中安装sbt-ensime插件
    • 7.3. 为sbt支持开发版的ensime
    • 7.4. 在sbt中安装coursier (有兼容性问题,暂时不用)
    • 7.5. 由于大陆连接官方maven库速度很慢,需要使用国内的镜像
    • 7.6. Emacs中安装插件sbt-mode
    • 7.7. 在eshell中键入 sbt ,然后,键入 ensimeConfig ,创建 .ensime
    • 7.8. 在Emacs中执行 ensime 命令就可以启动后端 ensime server
    • 7.9. 自己编译 ensime server
    • 7.10. references
  • 8. 为什么使用Emacs来开发?
  • 9. Emacs中的几款主要Java解释器或者后端
    • 9.1. jdee(old)
    • 9.2. eclim(eclipse as server)
    • 9.3. meghanada(推荐)
    • 9.4. ensime
      • 9.4.1. Introduce
      • 9.4.2. sbt(推荐)
      • 9.4.3. Maven(配合使用)
      • 9.4.4. Gradle(配合使用)
  • 10. Ensime 中常见的操作命令
    • 10.1. sbt ensimeConfig
    • 10.2. sbt run
    • 10.3. sbt core/it:testOnly *JavaCompilerSpec – -z addListener

1 效果(Ensime做后端,使用JavaFx开发界面)

2 Java开发的IDE

2.1 Eclipse和IntelliJ IDEA

Java开发的两个常用IDE是Eclipse和IntellJ IDEA。其中,Eclipse是一个免费和开源的版本,其他的很多语言的IDE也是使用它,然后,进行修改的。IntelliJ IDEA是一个收费的IDE,据说比Eclipse好用很多。这两个我都用的不多,Eclipse相对而言还要多一点。

3 Java开发的构建工具

什么是构建工具呢?

最早期的时候,是单文件的项目,根本不需要构建工具,直接编译那个单文件就可以。当项目变大,变复杂,项目的文件越来越多,然后,出现第一个构建工具:Make,后来,其发展为GNU Make。但是,由于需求的不断涌现,项目不仅仅只需要编译,还需要测试、部署等各种任务,各种语言出现了各种各样的构建工具。
当前,JVM生态圈由三大构建工具所统治:

  • Ant
  • Maven
  • Gradle

3.1 Ant

ANT是最早的构建工具,基于idea,好象是2000年有的,当时是最流行java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制特别好。

3.2 Maven

Maven它是用来给Ant补坑的,Maven第一次支持了从网络上下载的功能,仍然采用xml作为配置文件格式,它的问题是不能很好的相同库文件的版本冲突。Maven专注的是依赖管理,构建神马的并不擅长。

3.3 Gradle

Gradle属于结合以上两个的优点,它继承了Ant的灵活和Maven的生命周期管理,它最后被google作为了Android御用管理工具。它最大的区别是使用groovy语言作为配置文件格式,不用XML进行配置,使得脚本更加简洁。

4 既有IDE,何需构建工具?

我们一直搞不懂,既然,已经有Eclipse、IntelliJ IDEA等IDE工具,开发起来,创建项目,然后,点一下run就可以了,非常方便了,还要弄一堆的构建工具出来,麻不麻烦?为什么呢?

觉得应该很多同学有和我一样的疑惑,所以分享下

1.使用github上的开源项目时是不是经常发现有个叫maven的东西?

2.第一次使用Android studio时是不是要下载一个gradle的玩意?

折腾了一天,想导入下github的客户端源码。当然现在还没成功…各种看不懂的错误。郁闷为什么他们弄这些高端玩意干嘛,我们平时eclipse里面不一样的好好的开发吗。

作者:Antsdot蚁点
链接:https://zhuanlan.zhihu.com/p/23634332
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

同样,这里也有一个回答:

“一般而言,一个比较正规的项目都不会基于IDE进行构建…一般会用ant, maven, gradle , 为什么不用IDE呢?

首先,是IDE的选择,有人喜欢,用Vim,Eclipse,IntelliJ IDEA,收费的,免费的.

特别是公开的项目,你用什么IDE 相当于为这个IDE 打广告了..

所以,一般而言都是用构建工具,而不是IDE .实际上各种IDE 也是基于各种构建系统,也正是不同的IDE,它们的构建方式不同,所以要让不同的IDE间能一起开发,于是需要一个统一的构建工具,只是你平时不关注而已..

扯到构建工具, 一般c/c++ 项目用make,或者 premake. 而Java 一般是ant,ivy,gradle,maven,还有直接的shell, 是不是很多没听说过呢?

所以,去看开源项目就是长见识的时候了…”

来源:http://www.oschina.NET/question/558461_117208

所以,可以这么理解,构建工具是必须的。IDE只是内置了某些构建工具,但是这个工具不一定具有通用性,或者工具的功能不一定强大。为了统一,开发了一套独立的标准和工具,就是我们所说的构建工具。这些工具,各个IDE也可以使用。

更多构建工具的比较:
http://ensime.org/build_tools/

5 使用Maven进行Java开发

maven 使用 pom.xml 配置文件来进行项目的配置。
所有的库的最新配置信息,可以从这个网站上查询到:
https://mvnrepository.com

6 使用Gradle进行Java开发

从上面这么多内容,我们可以知道,从长远的角度来看,要想项目能够在更大的范围内扩展,特别是开源的项目,最好是使用独立的构建工具来构建项目,那么,Ant、Maven和Gradle应该选哪个呢?

当然是选Gradle了,这个既具有了Ant的灵活性和强大功能,又有Maven的依赖和库管理,语言groovy又比XML要简洁和灵活得多。所以,Gradle必然会把这两个取代,尽管目前,Maven可能还是主流,但不久,应该就是Gradle了。

6.1 Gradle基础入门

http://blog.jobbole.com/71999/

http://blog.jobbole.com/72558/

6.2 Eclipse中使用Gradle

https://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/

http://unmi.cc/groovy-based-auto-builder-gradle-get-started/

6.3 Emacs中的Gradle集成

  • 首先,可以创建一个yasnippet:

    # -*- mode: snippet -*-
    # name: build.gradle for springboot
    # key: springboot
    # --
    buildscript {ext {springBootVersion = '${1:1.5.3.RELEASE}'}repositories {// mavenCentral()maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:$\{springBootVersion\}")// classpath('se.transmode.gradle:gradle-docker:1.2')}
    }allprojects {repositories {// mavenCentral()maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}}
    }apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'org.springframework.boot'group = '${2:com.example}'
    jar {baseName = '${3:`(file-name-base (directory-file-name (file-name-directory (buffer-file-name))))`}'version =  '0.1.0'
    }sourceCompatibility = ${4:1.8}
    targetCompatibility = $4dependencies {compile("org.springframework.boot:spring-boot-starter${5:-web}")// compile("org.springframework.boot:spring-boot-starter-data-jpa")// compile("org.springframework.boot:spring-boot-starter-thymeleaf")// compile("com.h2database:h2")// compile("mysql:mysql-connector-java")testCompile('org.springframework.boot:spring-boot-starter-test')compile("org.springframework.boot:spring-boot-devtools")compile("junit:junit")
    }eclipse {classpath {containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'}
    }
    

  • 然后,就可以这eshell中,执行
    gradle bootrun
    

    来进行执行了。

  • 自动编译
    其中,有一点非常有趣,就是自动编译,当我们做了修改之后,自动编译,这样,我们就不需要反复的启动了。这个这Maven中是可以通过devtools来实现的,但是gradle不支持。后来,中google上找了很久,发现gradle有一个–continuous选项是做这个事情的。

    gradle -t classes processResources
    

    -t 也可以是 –continuous

7 使用sbt进行Scala/Java开发

7.1 安装

http://www.scala-sbt.org/

然后,在sbt的配置文件夹~/.sbt/中添加文件结构示例(需要手动添加文件夹或者文件):

[-] .sbt|--[-] 0.13|   |--[-] plugins|   |   `----- plugins.sbt|   `----- global.sbt`----- repositories

7.2 在sbt中安装sbt-ensime插件

编辑 ~/.sbt/0.13/plugins/plugins.sbt ,并添加:

addSbtPlugin("org.ensime" % "sbt-ensime" % "1.12.5")

7.3 为sbt支持开发版的ensime

编辑 ~/.sbt/0.13/global.sbt

import org.ensime.EnsimeCoursierKeys._
ensimeServerVersion in ThisBuild := "2.0.0-SNAPSHOT"

7.4 在sbt中安装coursier (有兼容性问题,暂时不用)

7.5 由于大陆连接官方maven库速度很慢,需要使用国内的镜像

在~/.sbt/下创建repositories文件,并输入:

[repositories]
local
# osc: http://maven.oschina.net/content/groups/public/ # 已经不能使用了,使用阿里云替代
aliyun:http://maven.aliyun.com/nexus/content/groups/public/
maven-central:http://repo1.maven.org/maven2/
store_2:http://repo2.maven.org/maven2/
uk_mir:http://uk.maven.org/maven2/
store_mir:http://mirrors.ibiblio.org/maven2/
typesafe: http://dl.bintray.com/typesafe/ivy-releases/,[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sbt-releases-repo:http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
sbt-plugins-repo:http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]

这样速度就会快一些。

7.6 Emacs中安装插件sbt-mode

(use-package sbt-mode:commands sbt-start sbt-command:init(setqsbt:prefer-nested-projects tsbt:scroll-to-bottom-on-output nilsbt:default-command ";compile ;test:compile ;it:compile"):config;; WORKAROUND: https://github.com/hvesalai/sbt-mode/issues/31;; allows using SPACE when in the minibuffer(substitute-key-definition'minibuffer-complete-word'self-insert-commandminibuffer-local-completion-map)(bind-key "C-c c" 'sbt-command sbt:mode-map)(bind-key "C-c e" 'next-error sbt:mode-map))

7.7 在eshell中键入 sbt ,然后,键入 ensimeConfig ,创建 .ensime

7.8 在Emacs中执行 ensime 命令就可以启动后端 ensime server

7.9 自己编译 ensime server

  • 获取源代码

    git clone https://github.com/ensime/ensime-server.git
    

  • 然后,cd 到ensime-server文件夹中
  • 运行 sbt ensimeConfig 产生 .ensime 文件
  • 再执行 compile 进行编译

7.10 references

https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown

8 为什么使用Emacs来开发?

Emacs被称作是一个操作系统,它可以跨平台,跨语言,只要掌握一个编辑器,就可以覆盖所有的语言了。有这样的优势,实在想不到什么理由不用它来作为开发工具。作为一个编辑器,它擅长的是编辑。对于需要大量解析的工作,它不是不擅长,其实也很擅长,比如CEDET,只是太慢了,对于大型项目,速度始终是个硬伤。
这样,就需要和其他的工具来进行配合使用。配合使用,就会涉及到交流和沟通的协议。一般的程序,直接把参数,或者字符串传递过去,得到返回的字符串就可以了。这是以字符串为传递介质。
对于,有些比较复杂的功能,单纯的传递字符串已经不能满足需求了。这样就会有更加复杂的数据结构,来进行传递工作。这个数据结构,双方要能理解,就必须有一个规定,这就是协议。

9 Emacs中的几款主要Java解释器或者后端

9.1 jdee(old)

9.2 eclim(eclipse as server)

9.3 meghanada(推荐)

我之前本来试用一下meghanada,结果发现windows下使用不了,就作罢了,转而使用ensime,但是ensime对scala支持很好,对java很多地方支持得并不好。于是,又硬着头皮来看meghanada的源代码,因为既然是java写的,怎么可能只能在linux运行呢。java本来就是write once, run everywhere的。看完源代码之后,发现确实是因为文件路径,linux使用的是"/",而windows是用的"\"导致的,于是提交了代码,现在linux、Mac和windows下都是可以正常运行的。

9.4 ensime

9.4.1 Introduce

https://coderwall.com/p/avlrna/emacs-ensime-for-your-scala-coding
http://blog.ssanj.net/posts/2011-04-06-ensime-with-emacs.html
构建工具和ensime配置工具,这里要分开来讲。一般构建工具和ensime配置插件是使用一套的。但有时,gradle的ensime配置插件过时了,sbt的ensime插件是由官方更新的,所以,总是和ensime配套升级的。所以,用sbt的插件进行配置总是可行的。但是,sbt是一个新的构建系统,所以,在基础的构建,如对springboot的支持中有时是不稳定的,这时使用Gradle或者Maven会更稳定。
结论:当sbt可以满足构建需求时,使用sbt是最方便的,既可以配置ensime,又可以构建。当sbt构建出问题时(极少数情况下),这时可以使用Gradle或者Maven来进行构建。
ensime的配置:

9.4.2 sbt(推荐)

http://ensime.org/build_tools/sbt/

  • install
    ~/.sbt/0.13/plugins/plugins.sbt

    addSbtPlugin("org.ensime" % "sbt-ensime" % "1.12.14")
    

    sbt ensimeConfig
    

9.4.3 Maven(配合使用)

http://ensime.org/build_tools/maven/

  • install
    ~/.m2/settings.xml :

    <build><pluginGroups><pluginGroup>org.ensime.maven.plugins</pluginGroup></pluginGroups>
    </build>
    

    国内加速使用阿里云镜像,在<build>节点下添加,这样速度就会快很多倍了:

    <mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>
    </mirrors>
    

  • use
    mvn ensime:generate
    

9.4.4 Gradle(配合使用)

http://ensime.org/build_tools/gradle/

  • install
    ~/.gradle/init.gradle

    apply plugin: AddEnsimePlugin
    class AddEnsimePlugin  implements Plugin<Gradle> {def supportedPlugins = ['org.gradle.api.plugins.JavaPlugin','org.gradle.api.plugins.ScalaPlugin','jp.leafytree.gradle.AndroidScalaPlugin']void apply(Gradle gradle) {def added = falsegradle.allprojects { project ->project.with {if (parent == null) {buildscript {repositories {mavenLocal()mavenCentral()jcenter()}//if using snapshot, change rootProject.ensime.serverVersion to a snapshot//update this property to the lated ensime-gradle versiondependencies {classpath 'net.coacoas.gradle:ensime-gradle:0.3.0-SNAPSHOT'}}}plugins.whenPluginAdded { plugin ->if (!added && supportedPlugins.contains(plugin.class.name)) {rootProject.apply plugin: 'org.ensime.gradle'//update the server version to the latest supported by the ensime-gradle pluginrootProject.ensime.serverVersion = "2.0.0-SNAPSHOT"added = true}}}}}
    }
    

  • use
    gradle ensime
    

10 Ensime 中常见的操作命令

10.1 sbt ensimeConfig

生成.ensime配置文件

10.2 sbt run

运行整个项目

10.3 sbt core/it:testOnly *JavaCompilerSpec – -z addListener

运行正则表达式匹配的测试用例。

Date: 2017-02-12 20:07

Author: WEN YANG

Created: 2018-06-08 Fri 21:49

Emacs 25.3.1 (Org mode 8.2.10)

Validate

转载于:https://www.cnblogs.com/yangwen0228/p/6534655.html

用Emacs进行Java开发相关推荐

  1. java 开发人员工具_Java开发人员的5种工具

    java 开发人员工具 改善我们编写的Java代码的一种方法是使用最好的工具. 因此,让我们看看IDR Solutions建议使用的5种最常用的工具来帮助Java开发人员编写更好的代码. 查找错误 F ...

  2. Java开发人员的5种工具

    改善我们编写的Java代码的一种方法是使用最好的工具. 因此,让我们看看IDR Solutions建议使用的5种最常用的工具来帮助Java开发人员编写更好的代码. 查找错误 FindBugs是一个开放 ...

  3. Java开发人员的Erlang

    您可能没有注意到,但是距离我上次发布博客已经过去了几个星期. 原因是我的Soleus骨折了,而我的腿也石膏了. 不能动弹,我认为调查完全不同的东西是个好主意–要么看那天的电视,要么,尽管Kojak和M ...

  4. 史上最全的主流java开发工具(一)

    声明:为了让大家能有兴趣看下去.我们尽量把文章缩短,分成几篇来发布. 要想编写程序,需要一个能编写源代码的编辑工具.常用源码编辑工具 一.java初学者常用源码编辑工具介绍 java源代码本质上其实就 ...

  5. 阿里巴巴 Java 开发手册评述

    注:本文基于阿里巴巴技术手册的1.0.2版本编写 2016年底,阿里巴巴公开了其在内部使用的Java编程规范.随后进行了几次版本修订,笔者当时看到的版本为v1.0.2版.下载地址可以在其官方社区--云 ...

  6. eclipse java jde,Eclipse平台入门之一:什么是Eclipse,我们将开始介绍Java 开发环境(JDE)。...

    为试验一下 Java 开发环境,我们将创建并运行一个"Hello, world"应用程序.使用 Java 透视图,右键单击"Hello"项目,选择 New=&g ...

  7. 一周极客热文:Java开发的10位牛人

    1983年,Gosling获得了卡尔加里大学的计算机科学学士学位.1990年,他获得了卡内基梅隆大学的计算机科学博士学位,师从Bob Sproull.在攻读博士期间,他自己开发了一款emacs,叫Go ...

  8. Java开发工具简介

    Java语言是一种解释性的语言,即读一句程序执行一句,这样就需要一 个解释器完成源程序到机器语言的翻译过程.同时Java是跨平台的语 言,跨平台是指Java程序可以在安装任何操作系统的计算机上运行,起 ...

  9. emacs 搭建racket开发环境

    emacs 搭建racket开发环境 emacs下搭建开发racket的环境,笔者之前用过下面两种模式:geiser和racket-mode.相对而言,后一种方式要显得简单.本文主要介绍后一种方式环境 ...

最新文章

  1. 如果地府需要一个后台管理系统,你会如何设计?
  2. Linux监控(添加自定义监控项,配置邮件告警)
  3. .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇
  4. 好程序员web前端分享详细了解JavaScript函数
  5. bax在计算机英语的意思,BaX(X=S,Se,Te)的电子结构计算
  6. JVM到底怎么进行类加载器的呢?
  7. matlab如何泰勒公式用求近似值_Matlab 数值计算泰勒公式
  8. 安卓程序员需要什么证书
  9. 区块链技术视频资料下载(不断更新中)
  10. PHP工程师历年企业笔试真题汇总
  11. 《人月神话》学习笔记
  12. 笔记本实现wifi热点
  13. matlab计算轮廓曲率半径,matlab求曲率半径
  14. mmdetection config文件中几个参数的理解(anchor_scales,anchor_ratios,anchor_strides)
  15. layui 重置checkbox全部选中和未选中
  16. 【MATLAB图像处理】图像复原
  17. POJ3169 Layout , 最短路算法解差分约束问题
  18. 数字IC设计的第一步——Synopsys EDA Tools的安装
  19. 利用python进行数据分析-数据聚合与分组运算2
  20. Quartz数据库表分析

热门文章

  1. SAP的这三款CRM解决方案,您能区分清楚么
  2. list index out of bounds_python3基础03列表(list)和元组(tuple)
  3. Z字形变换(LeetCode第6题)
  4. 网络流-Dinic求最大流(仅做自己复习,写的很不清楚)
  5. windows没有磁盘_Windows硬盘和内存镜像取证
  6. 系统崩溃mysql怎么保存表_第09问:MySQL 莫名崩溃,如何保留现场?
  7. eclipse git提交代码_来看看大厂的Git提交规范,千万别乱提交代码哦...
  8. iphone相册怎么加密_iOS限免推荐|视频滤镜和转场、专属加密应用、照片动画等共 5 款...
  9. bootstrap 单选按钮点击change事件 只触发一次_微信支付新增“确认”按钮,付错钱将成为历史?...
  10. oracle如何避免表锁定,Oracle 解决表锁定的问题