diff --git a/demo/pom.xml b/demo/pom.xml
new file mode 100644
index 000000000..1245ad00e
--- /dev/null
+++ b/demo/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ com.taobao.arthas
+ arthas-all
+ 3.0.5-SNAPSHOT
+
+ arthas-demo
+ arthas-demo
+
+
+ arthas-demo
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.6
+ 1.6
+ UTF-8
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ demo.MathGame
+
+
+
+
+
+
+
+
diff --git a/demo/src/main/java/demo/MathGame.java b/demo/src/main/java/demo/MathGame.java
new file mode 100644
index 000000000..51fd45a82
--- /dev/null
+++ b/demo/src/main/java/demo/MathGame.java
@@ -0,0 +1,63 @@
+package demo;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+public class MathGame {
+ private static Random random = new Random();
+
+ private int illegalArgumentCount = 0;
+
+ public static void main(String[] args) throws InterruptedException {
+ MathGame game = new MathGame();
+ while (true) {
+ game.run();
+ TimeUnit.SECONDS.sleep(1);
+ }
+ }
+
+ public void run() throws InterruptedException {
+ try {
+ int number = random.nextInt();
+ List primeFactors = primeFactors(number);
+ print(number, primeFactors);
+
+ } catch (Exception e) {
+ System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage());
+ }
+ }
+
+ public static void print(int number, List primeFactors) {
+ StringBuffer sb = new StringBuffer(number + "=");
+ for (int factor : primeFactors) {
+ sb.append(factor).append('*');
+ }
+ if (sb.charAt(sb.length() - 1) == '*') {
+ sb.deleteCharAt(sb.length() - 1);
+ }
+ System.out.println(sb);
+ }
+
+ public List primeFactors(int number) {
+ if (number < 2) {
+ illegalArgumentCount++;
+ throw new IllegalArgumentException("number is: " + number + ", need >= 2");
+ }
+
+ List result = new ArrayList();
+ int i = 2;
+ while (i <= number) {
+ if (number % i == 0) {
+ result.add(i);
+ number = number / i;
+ i = 2;
+ } else {
+ i++;
+ }
+ }
+
+ return result;
+ }
+}
diff --git a/packaging/src/main/assembly/assembly.xml b/packaging/src/main/assembly/assembly.xml
index 88892660e..7d950acb2 100644
--- a/packaging/src/main/assembly/assembly.xml
+++ b/packaging/src/main/assembly/assembly.xml
@@ -28,6 +28,10 @@
../boot/target/arthas-boot-jar-with-dependencies.jar
arthas-boot.jar
+
+ ../demo/target/arthas-demo.jar
+ arthas-demo.jar
+
../bin/install-local.sh
diff --git a/pom.xml b/pom.xml
index c065c5b53..58c585f42 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,7 @@
agent
client
boot
+ demo
testcase
site
packaging