本文主要介绍kilim的相关资源以及以Hello world为例,介绍kilim如何编译运行。
kilim 1.0:https://github.com/kilim/kilim
kilim 2.0:https://github.com/nqzero/kilim
工程里包含了基础的运行方式、源码、例子以及相关文档等资源。如果在使用中遇到什么问题或者bug,都可以给作者提issue,让kilim变得更好,我们团队在使用过程中就遇到了很多诡异的问题:https://github.com/kilim/kilim/issues
kilim框架可以使用maven来编译,引入了ant编译插件,ant的配置中指明了需要weave(织入)的目录,使用maven package就可以编译出一个kilim的jar包出来。
mvn package
可以在这个kilim的工程里加入自己的测试例子,框架里也有对应的一些例子,在kilim.examples包下。
hello,world 源码路径:
https://github.com/kilim/kilim/blob/master/examples/kilim/examples/SimpleTask.java
/**
* Spawn a task, communicate through a shared mailbox. The task's
* termination is knowm through another mailbox.
*
* The structure of this class is not much different from a Thread
* version that uses PipedInput/OutputStreams (Task instead of Thread,
* execute() instead of run(), and typed, buffered mailboxes instead
* of pipes.
*
* [compile] javac -d ./classes SimpleTask.java
* [weave] java kilim.tools.Weave -d ./classes kilim.examples.SimpleTask
* [run] java -cp ./classes:./classes:$CLASSPATH kilim.examples.SimpleTask
*/
public class SimpleTask extends Task {
static Mailbox<String> mb = new Mailbox<String>();
public static void main(String[] args) throws Exception {
new SimpleTask().start();
Thread.sleep(10);
mb.putnb("Hello ");
mb.putnb("World\n");
mb.putnb("done");
}
/**
* The entry point. mb.get() is a blocking call that yields
* the thread ("pausable")
*/
public void execute() throws Pausable{
while (true) {
String s = mb.get();
if (s.equals("done")) break;
System.out.print(s);
}
// This is not good form. Tasks shouldn't be exiting the system.
// See SimpleTask2 for a better way to clean up.
System.exit(0);
}
}
直接用上面的编译方式即可运行,也可以使用命令行的方式来运行。
➜ kilim git:(master) ✗ java -cp ./classes:$CLASSPATH kilim.examples.SimpleTask
Hello World
可能会报错:
Exception in thread "main" java.lang.UnsupportedClassVersionError: kilim/examples/Chain : Unsupported major.minor version 52.0
这是eclipse中编译的java jdk版本,和命令行的版本不一致导致;
eclipse中使用的是1.8,切换为1.7,和命令行的保持一致即可。
如果你尝试使用命令行手动编译,可能会遇到一些,可以参考:
http://phl.iteye.com/blog/2247112
http://blog.csdn.net/chenyi8888/article/details/7047099
windows命令行可以这样编译运行:
编译
java -cp kilim.jar: kilim.tools.Weaver -d ./classes kilim.examples.SimpleTask
织入
java -cp kilim.jar:libs/asm-all-4.1.jar kilim.tools.Weaver -d ./classes kilim.examples.SimpleTask
执行
java -cp kilim.jar:classes kilim.examples.SimpleTask
E:\code\git\kilim>java -cp kilim.jar;classes;libs\asm-all-4.1.jar;$CLASSPATH kilim.examples.SimpleTask
Hello World
<plugin>
<groupId>org.db4j</groupId>
<artifactId>kilim</artifactId>
<version>2.0.0-14</version>
<executions>
<execution>
<goals><goal>weave</goal></goals>
</execution>
</executions>
</plugin>
我这里使用java8可以完美使用,但是java7会报错,理论上本地用java7编译一下kilim2.0,应该就可以用这个插件了。 这个插件应该是来源于:https://github.com/jestan/kilim-maven-plugin, 如果你使用的是kilim1.0版本,你把相应的代码迁移到你的1.0版本,应该也可以完美使用。
* 还有另外一种方式,应该也是比较好的:
https://github.com/pfmiles/kilim-fiber/wiki
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<classpathScope>compile</classpathScope>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>kilim.tools.Weaver</argument>
<argument>-d</argument>
<argument>${project.build.outputDirectory}</argument>
<argument>${project.build.outputDirectory}</argument>
</arguments>
</configuration>
</plugin>
具体可以见我的一个工程demo:https://github.com/zy416548283/JavaBaseStudy/