Hello IDEA

Scala-SBT

首先安装scala插件. 在13+版本中已经默认有SBT插件.

《Hello IDEA》

新建一个Project, 选择基于SBT的Scala项目方式创建

《Hello IDEA》

下一步选择JDK和SBT, Scala的版本.

《Hello IDEA》

点击Finish, 会生成如下图的代码结构图: 其中
build.sbt文件类似maven的pom.xml
在src/main下会创建java, resources, scala三个Sources Root

《Hello IDEA》

新建scala object. (或者新建一个scala class, 但是为了在IDEA中运行, 还要在class中新建一个同名的object)

《Hello IDEA》

运行方式:

  1. 在scala object上右键Run你的Object名字

  2. 使用sbt命令运行

hadoop@hadoop:~/IdeaProjects$ cd scala-sbt/
hadoop@hadoop:~/IdeaProjects/scala-sbt$ ls
build.sbt  project  src  target
hadoop@hadoop:~/IdeaProjects/scala-sbt$ sbt
Loading project definition from /home/hadoop/IdeaProjects/scala-sbt/project
Set current project to scala-sbt (in build file:/home/hadoop/IdeaProjects/scala-sbt/) > compile
Updating {file:/home/hadoop/IdeaProjects/scala-sbt/}scala-sbt...
Resolving org.fusesource.jansi#jansi;1.4 ...
Done updating.
Compiling 3 Scala sources to /home/hadoop/IdeaProjects/scala-sbt/target/scala-2.10/classes... [warn] there were 1 deprecation warning(s); re-run with -deprecation for details [warn] one warning found
Total time: 6 s, completed 2015-1-30 17:16:37 > run Multiple main classes detected, select one to run: [1] com.zqh.akka.Pi [2] com.zqh.scala.HelloScala [3] com.zqh.akka.HelloAkka Enter number: 1
Running com.zqh.akka.Pi Pi approximation: 3.1415926435897883 Calculation time: 490 milliseconds
Total time: 6 s, completed 2015-1-30 17:16:47 >
  1. 使用IDEA自带的sbt运行

点击SBT Console视图, 点击绿色的运行按钮, 就会自动运行sbt命令

《Hello IDEA》

项目依赖的jar包:

《Hello IDEA》

Scala-Module

新建一个空的Project: codebase

《Hello IDEA》

空的项目里可以新建多个不同语言的module. 比如scala module, 注意这里没有sbt选项!

《Hello IDEA》

因为仅仅是scala模块, 只生成一个src目录, 并所以没有sbt生成的那种固定的代码结构

《Hello IDEA》

Maven-Module

可以在这个codebase项目中新建maven工程:

1.点击External Libraries, 然后New Module, 不要在已有的module中再new module
2.注意不要勾选Create from archetype, 否则不会自动帮你生成src/main/java等目录.
3.第一步不在已有的module新建module, 所以New Module的parent界面为none

《Hello IDEA》

maven的代码结构是src/main/java, src/main/resources, 以及根目录下的pom.xml用来加载第三方jar包

《Hello IDEA》

Gradle-Module

http://clojure.iteye.com/blog/2091723

mkdir gradle-demo && cd gradle-demo && vi build.gradle

apply plugin: 'idea'
apply plugin: 'scala'

task "createDirs" << {
    sourceSets*.scala.srcDirs*.each { it.mkdirs() }
    sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

repositories{
    mavenCentral()
    mavenLocal()
}

dependencies{
    compile "org.scala-lang:scala-library:2.10.4"
    compile "org.scala-lang:scala-compiler:2.10.4"
    compile "org.scala-lang:scala-reflect:2.10.4"
    testCompile "junit:junit:4.11"
}

task run(type: JavaExec, dependsOn: classes) {
    main = 'Main'
    classpath sourceSets.main.runtimeClasspath
    classpath configurations.runtime
}

gradle createDirs

:createDirs
BUILD SUCCESSFUL
Total time: 4.413 secs

在IDEA中Import Module, 选择刚才创建的目录

《Hello IDEA》

《Hello IDEA》

《Hello IDEA》

Clojure-module

安装IDEA的clojure插件La Clojure.

创建一个clojure-module: clojure-demo

《Hello IDEA》

《Hello IDEA》

在HelloClojure.clj右键点击Run ‘HelloClojure’,快捷键为: Ctrl+Shift+F10

《Hello IDEA》

或者右键点击Start Clojure Console, 快捷键为Ctrl+Shift+D
这个调用的实际上是Clojure的REPL, 和在命令行上执行java -jar clojure.jar是一样的

《Hello IDEA》

leiningen

Scala相关的插件有SBT和scala. 其中SBT会创建出样例式的代码结构工程. scala没有. 而La Clojure插件也没有.
clojure的构建工具是: leiningen
https://github.com/technomancy/leiningen
http://wiki.fnil.net/index.php?title=Leiningen%E6%95%99%E7%A8%8B%E4%B8…

More Tutorial:
http://blog.8thlight.com/colin-jones/2010/11/26/a-leiningen-tutorial.h…
https://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md
http://ben.vandgrift.com/2013/03/13/clojure-hello-world.html

下载 https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lei… 脚本放到~/bin下

mv lein.txt lein
chmod 755 lein

第一次执行lein会去下载leiningen.jar包. 后面再次执行时还会下载, 参考lein脚本设置LEIN_JAR就使用已有的jar

vi ~/.bashrc

export LEIN_JAR=/home/hadoop/.lein/self-installs/leiningen-2.5.0-standalone.jar
export PATH=$PATH:/home/hadoop/sh:/home/hadoop/bin
source ~/.bashrc

hadoop@hadoop:~/IdeaProjects/codebase$ lein new clojure-project
Generating a project called clojure-project based on the 'default' template.
The default template is intended for library projects, not applications.
To see other templates (app, plugin, etc), try `lein help new`.
hadoop@hadoop:~/IdeaProjects/codebase$ tree clojure-project/
clojure-project/
├── doc
│   └── intro.md
├── LICENSE
├── project.clj
├── README.md
├── resources
├── src
│   └── clojure_project
│       └── core.clj
└── test
    └── clojure_project
        └── core_test.clj

6 directories, 6 files

lein REPL

hadoop@hadoop:~/IdeaProjects/codebase/clojure-project$ lein repl
nREPL server started on port 59876 on host 127.0.0.1 - nrepl://127.0.0.1:59876
REPL-y 0.3.5, nREPL 0.2.6
Clojure 1.6.0
Java HotSpot(TM) 64-Bit Server VM 1.7.0_67-b01
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (+ 1 2)
3
user=> quit
Bye for now!
hadoop@hadoop:~/IdeaProjects/codebase/clojure-project$ lein run
No :main namespace specified in project.clj.

lein RUN

hadoop@hadoop:~/IdeaProjects/codebase/clojure-project$ cat project.clj
(defproject clojure-project "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]]
  :main ^:skip-aot clojure-project.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}})

hadoop@hadoop:~/IdeaProjects/codebase/clojure-project$ cat src/clojure_project/core.clj 
(ns clojure-project.core)

(defn foo
  "I don't do a whole lot."
  [x]
  (println x "Hello, World!"))

(defn -main []
  (foo "zqh"))

hadoop@hadoop:~/IdeaProjects/codebase/clojure-project$ lein run
zqh Hello, World!

IDEA与leiningen

http://clojure.iteye.com/blog/1740422 
http://www.cnblogs.com/devos/p/4201743.html

    原文作者:zqhxuyuan
    原文地址: https://segmentfault.com/a/1190000002995295
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞