From: Waldemar Kozaczuk <[email protected]>
Committer: Nadav Har'El <[email protected]>
Branch: master

Move java/* to modules/java* and modularize java images build process

The main goal of this patch is to move java related artifacts and build logic from main makefile and folder ./java to relevant existing or new modules. Other goals are following:

- minimize modules and corresponding artifacts that are part of default java image - modularize runjava to accomodate either isolated or non-isolated mode jars (non-isolated jar is 400K smaller now) - provide managable way to build images to run java apps in isolated and non-isolated mode without
  proliferation of new modules
- remove mgmt-related artifacts from default java image and park it in new module/java-mgtm - make jolokia related artifacts be added to the image only if httpserver module is included - make all the changes backwards compatible so that the scripts that build capstan images and other
  standard ones do not need to change

Here is a list of existing or new java related modules and apps (new marked with *):
- modules/java-base (*)       - contains common C/C++ code and runjava code
- modules/java-isolated (*) - requires(java-base), provides(java-cmd); builds isolated mode specific java.so and runjava jar - modules/java-non-isolated - requires(java-base), provides(java-cmd); builds non-isolated mode specific java.so and runjava jar - modules/java-cmd (*) - requires(java-isolated); acts to provides necessary default for the module java
- modules/java                - requires(java-isolated, openjdk7)
- modules/java-tests          - requires(java-base)
- modules/java-mgmt (*) - "parking place" for cloudius jar and jni so used by obsolete mgmt app
- modules/openjdk7 (*)        - requires(java-cmd), provides(java)
- modules/httpserver - requires(josvsym,httpserver-jolokia-plugin,httpserver-jvm-plugin) if java module included
- apps/openjdk8-fedora        - requires(java-cmd), provides(java)
- apps/openjdk8-zulu-compactN - requires(java-non-isolated), provides(java); implictly builds in non-isolated mode
- apps/openjdk9-ea-java-base  - requires(java-non-isolated), provides(java)
- apps/openjdk8-zulu-compact3-with-java-beans - requires(java-cmd), provides(java); new module that allows building minimal java image (only 2MB bigger than compact3) to run most java apps

Examples to build example java app:

scripts/build image=java-example # builds with JRE 7 in isolated mode
scripts/build image=java-non-isolated,openjdk7,java-example # builds with JRE 7 in non-isolated mode scripts/build image=java-non-isolated,openjdk8-fedora,java-example # builds with JRE 8 in non-isolated mode scripts/build image=openjdk8-zulu-compact1,java-example # builds with JRE 8 compact 1 in non-isolated mode because compact 'java' require java-non-isolated

Signed-off-by: Waldemar Kozaczuk <[email protected]>

Message-Id: <[email protected]>

---
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,8 @@
 build/
 .\#*
 \#*\#
-java/*/target
+modules/java-base/*/target
+modules/java-tests/*/target

 .gradle
 tags
@@ -24,11 +25,22 @@ tracefile

 build.out

-java/runjava/dependency-reduced-pom.xml
-java/jolokia-agent/dependency-reduced-pom.xml
+modules/java-base/**/dependency-reduced-pom.xml
+modules/java-base/**/*.iml
+modules/java-base/obj/
+modules/java-tests/**/*.iml
+modules/java-tests/obj/
+modules/java-isolated/obj/
+modules/java-non-isolated/obj/
+modules/java-mgmt/cloudius/target/
+modules/java-mgmt/obj/
+modules/httpserver/usr.manifest
 modules/httpserver-jolokia-plugin/autogen/
 modules/httpserver-jolokia-plugin/jolokia.so
 modules/httpserver-jolokia-plugin/obj/
+modules/httpserver-jolokia-plugin/jolokia-agent/target/
+modules/httpserver-jolokia-plugin/jolokia-agent/dependency-reduced-pom.xml
 modules/httpserver-jvm-plugin/autogen/
 modules/httpserver-jvm-plugin/jvm.so
 modules/httpserver-jvm-plugin/obj/
+.idea
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -131,17 +131,7 @@ endif
 quiet = $(if $V, $1, @echo " $2"; $1)
 very-quiet = $(if $V, $1, @$1)

-# TODO: These java-targets shouldn't be compiled here, but rather in modules/java/Makefile.
-# The problem is that getting the right compilation lines there is hard :-(
-ifeq ($(arch),aarch64)
-java-targets :=
-else
-java-targets := $(out)/java/jvm/java.so $(out)/java/jvm/java_non_isolated.so \ - $(out)/java/jni/balloon.so $(out)/java/jni/elf-loader.so $(out)/java/jni/networking.so \ - $(out)/java/jni/stty.so $(out)/java/jni/tracepoint.so $(out)/java/jni/power.so $(out)/java/jni/monitor.so
-endif
-
-all: $(out)/loader.img $(java-targets) links
+all: $(out)/loader.img links
 .PHONY: all

 links:
@@ -377,10 +367,6 @@ $(out)/%.o: %.c | generated-headers
        $(makedir)
        $(call quiet, $(CC) $(CFLAGS) -c -o $@ $<, CC $*.c)

-$(out)/java/jvm/java_non_isolated.o: java/jvm/java.cc | generated-headers
-       $(makedir)
- $(call quiet, $(CXX) $(CXXFLAGS) -DRUN_JAVA_NON_ISOLATED -o $@ -c java/jvm/java.cc, CXX $<)
-
 $(out)/%.o: %.S
        $(makedir)
        $(call quiet, $(CXX) $(CXXFLAGS) $(ASFLAGS) -c -o $@ $<, AS $*.s)
diff --git a/java/jolokia-agent/pom.xml b/java/jolokia-agent/pom.xml
--- a/java/jolokia-agent/pom.xml
+++ b/java/jolokia-agent/pom.xml
@@ -1,64 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>io.osv</groupId>
-        <artifactId>java-parent</artifactId>
-        <version>${version}</version>
-    </parent>
-
-       <groupId>io.osv</groupId>
-       <artifactId>jolokia-agent</artifactId>
-
-
-       <dependencies>
-               <dependency>
-                       <groupId>org.jolokia</groupId>
-                       <artifactId>jolokia-core</artifactId>
-                       <version>1.2.2</version>
-               </dependency>
-       </dependencies>
-
-       <build>
-               <plugins>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
-                    </descriptorRefs>
-                    <finalName>${artifactId}</finalName>
-                    <appendAssemblyId>false</appendAssemblyId>
-                    <classifier>jar</classifier>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-jar-with-dependencies</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-shade-plugin</artifactId>
-                               <version>2.3</version>
-                               <executions>
-                                       <execution>
-                                               <phase>package</phase>
-                                               <goals>
-                                                       <goal>shade</goal>
-                                               </goals>
-                                               <configuration>
-                                                       
<minimizeJar>true</minimizeJar>
-                                               </configuration>
-                                       </execution>
-                               </executions>
-                       </plugin>
-               </plugins>
-       </build>
-
-</project>
\ No newline at end of file
diff --git a/modules/httpserver-jolokia-plugin/Makefile b/modules/httpserver-jolokia-plugin/Makefile
--- a/modules/httpserver-jolokia-plugin/Makefile
+++ b/modules/httpserver-jolokia-plugin/Makefile
@@ -58,6 +58,7 @@ DEPS := $(OBJ_FILES:.o=.d)
 module: all

 all: $(TARGET).so
+       cd jolokia-agent && mvn package -DskipTests=true

 init:
        @echo "  MKDIRS"
@@ -90,3 +91,5 @@ clean:
        $(call very-quiet, $(RM) -f usr.manifest)
        $(call very-quiet, $(RM) -rf obj)
        $(call very-quiet, $(RM) -rf autogen)
+       cd jolokia-agent && mvn clean
+       -rm -f dependency-reduced-pom.xml
diff --git a/modules/httpserver-jolokia-plugin/jolokia-agent/pom.xml b/modules/httpserver-jolokia-plugin/jolokia-agent/pom.xml
--- a/modules/httpserver-jolokia-plugin/jolokia-agent/pom.xml
+++ b/modules/httpserver-jolokia-plugin/jolokia-agent/pom.xml
@@ -0,0 +1,78 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <version>1.0-SNAPSHOT</version>
+    </properties>
+
+    <groupId>io.osv</groupId>
+    <artifactId>jolokia-agent</artifactId>
+    <version>${version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-dependency-plugin</artifactId>
+            <version>2.3</version>
+            <scope>provided</scope>
+        </dependency>
+       <dependency>
+           <groupId>org.jolokia</groupId>
+           <artifactId>jolokia-core</artifactId>
+           <version>1.2.2</version>
+       </dependency>
+   </dependencies>
+
+   <build>
+       <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <finalName>${project.artifactId}</finalName>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <classifier>jar</classifier>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-jar-with-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+           <plugin>
+               <groupId>org.apache.maven.plugins</groupId>
+               <artifactId>maven-shade-plugin</artifactId>
+               <version>2.3</version>
+               <executions>
+                       <execution>
+                               <phase>package</phase>
+                               <goals>
+                                       <goal>shade</goal>
+                               </goals>
+                               <configuration>
+                                       <minimizeJar>true</minimizeJar>
+                               </configuration>
+                       </execution>
+               </executions>
+         </plugin>
+       </plugins>
+   </build>
+
+</project>
diff --git a/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java b/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java --- a/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java +++ b/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java
null
diff --git a/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java b/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java --- a/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java +++ b/modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java
null
diff --git a/modules/httpserver-jolokia-plugin/module.py b/modules/httpserver-jolokia-plugin/module.py
--- a/modules/httpserver-jolokia-plugin/module.py
+++ b/modules/httpserver-jolokia-plugin/module.py
@@ -8,4 +8,4 @@
 usr_files = FileMap()
usr_files.add(os.path.join(_module, 'jolokia.so')).to('/usr/mgmt/plugins/jolokia.so') usr_files.add(os.path.join(_module, 'api-doc/listings/jolokia.json')).to('/usr/mgmt/api/listings/jolokia.json')
-usr_files.add('${OSV_BASE}/java/jolokia-agent/target/jolokia-agent.jar').to('/usr/mgmt/jolokia-agent.jar')
+usr_files.add(os.path.join(_module, 
'jolokia-agent/target/jolokia-agent.jar')).to('/usr/mgmt/jolokia-agent.jar')
diff --git a/modules/httpserver/module.py b/modules/httpserver/module.py
--- a/modules/httpserver/module.py
+++ b/modules/httpserver/module.py
@@ -17,6 +17,11 @@
 api.require('libtools')
 api.require('libyaml')

+# only require next 3 modules if java (jre) is included in the list of modules
+api.require_if_other_module_present('josvsym','java')
+api.require_if_other_module_present('httpserver-jolokia-plugin','java')
+api.require_if_other_module_present('httpserver-jvm-plugin','java')
+
 # httpserver will run regardless of an explicit command line
 # passed with "run.py -e".
 daemon = api.run_on_init(_exe + ' &!')
diff --git a/modules/java-base/Makefile b/modules/java-base/Makefile
--- a/modules/java-base/Makefile
+++ b/modules/java-base/Makefile
@@ -0,0 +1,19 @@
+include common.gmk
+
+ifeq ($(arch),aarch64)
+java-targets :=
+else
+java-targets := obj/jni/monitor.so
+endif
+
+module: all
+
+all: $(init) $(java-targets)
+
+init:
+       @echo "  MKDIRS"
+       $(call very-quiet, mkdir -p obj/jni)
+.PHONY: init
+
+clean:
+       $(call very-quiet, $(RM) -rf obj)
diff --git a/modules/java-base/common.gmk b/modules/java-base/common.gmk
--- a/modules/java-base/common.gmk
+++ b/modules/java-base/common.gmk
@@ -0,0 +1,46 @@
+
+INCLUDES = -I$(src)/arch/$(arch) -I$(src) -I$(src)/include -I$(src)/arch/common
+INCLUDES += -I$(src)/include/glibc-compat
+INCLUDES += -isystem $(src)/external/$(arch)/acpica/source/include
+INCLUDES += $(shell $(CXX) -E -xc++ - -v </dev/null 2>&1 | awk '/^End/ {exit} /^ .*c\+\+/ {print "-isystem" $$0}')
+INCLUDES += -isystem $(src)/include/api
+INCLUDES += -isystem $(src)/include/api/$(arch)
+INCLUDES += -I$(src)/build/$(mode)/gen/include -isystem $(miscbase)/usr/include
+INCLUDES += -I$(src)/java
+INCLUDES += -I$(jdkbase)/include -I$(jdkbase)/include/linux
+
+autodepend = -MD -MT $@ -MP
+COMMON_FLAGS = -g -Wall -fPIC $(INCLUDES) -O2 $(autodepend) -DCONF_debug_memory=0 -D_KERNEL
+CXXFLAGS  = -std=c++11 $(COMMON_FLAGS)
+CFLAGS = -std=gnu99 $(COMMON_FLAGS)
+#CXXFLAGS = -g -Wall -std=c++11 -fPIC $(INCLUDES) -O2 $(autodepend) $(configuration)
+src = $(shell readlink -f ../..)
+
+RM := /bin/rm
+
+ifndef arch
+       arch = x64
+endif
+
+ifndef mode
+       mode = release
+endif
+
+miscbase = $(src)/external/$(arch)/misc.bin
+
+configuration-defines = conf-preempt conf-debug_memory conf-logger_debug
+
+configuration = $(foreach cf,$(configuration-defines), \
+                      -D$(cf:conf-%=CONF_%)=$($(cf)))
+
+quiet = $(if $V, $1, @echo " $2"; $1)
+very-quiet = $(if $V, $1, @$1)
+
+obj/%.o: %.cc | init
+       $(call quiet, $(CXX) $(CXXFLAGS) -c -MMD  -o $@ $<, CXX $@)
+
+obj/%.o: %.c | init
+       $(call quiet, $(CC) $(CFLAGS) -c -MMD  -o $@ $<, CC $@)
+
+%.so: %.o
+       $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ $^, LINK $@)
diff --git a/modules/java-base/java.cc b/modules/java-base/java.cc
--- a/modules/java-base/java.cc
+++ b/modules/java-base/java.cc
@@ -12,11 +12,11 @@
 #include <unistd.h>
 #include <regex>
 #include <osv/debug.hh>
-#include "jvm_balloon.hh"
+#include <java/jvm/jvm_balloon.hh>
 #include <osv/mempool.hh>
-#include "java_api.hh"
+#include <java/jvm/java_api.hh>
 #include "osv/version.hh"
-#include "jni_helpers.hh"
+#include <java/jvm/jni_helpers.hh>
 #include <osv/defer.hh>
 #include <osv/app.hh>

@@ -30,11 +30,12 @@ extern size_t jvm_heap_size;
 // parameters.

 #define JVM_PATH         "/usr/lib/jvm/jre/lib/amd64/server/libjvm.so"
-#define RUNJAVA_JAR_PATH "/java/runjava.jar"

 #if defined(RUN_JAVA_NON_ISOLATED)
+#define RUNJAVA_JAR_PATH "/java/runjava-non-isolated.jar"
#define RUNJAVA "io/osv/nonisolated/RunNonIsolatedJvmApp" // separated by slashes, not dots
 #else
+#define RUNJAVA_JAR_PATH "/java/runjava-isolated.jar"
#define RUNJAVA "io/osv/isolated/RunIsolatedJvmApp" // separated by slashes, not dots
 #endif

diff --git a/modules/java-base/jni/monitor.cc b/modules/java-base/jni/monitor.cc
--- a/modules/java-base/jni/monitor.cc
+++ b/modules/java-base/jni/monitor.cc
null
diff --git a/modules/java-base/jni/monitor.hh b/modules/java-base/jni/monitor.hh
--- a/modules/java-base/jni/monitor.hh
+++ b/modules/java-base/jni/monitor.hh
null
diff --git a/modules/java-base/module.py b/modules/java-base/module.py
--- a/modules/java-base/module.py
+++ b/modules/java-base/module.py
@@ -0,0 +1,5 @@
+from osv.modules import api
+
+api.require('fonts')
+api.require('ca-certificates')
+api.require('libz')
diff --git a/modules/java-base/pom.xml b/modules/java-base/pom.xml
--- a/modules/java-base/pom.xml
+++ b/modules/java-base/pom.xml
@@ -0,0 +1,44 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                      http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <version>1.0-SNAPSHOT</version>
+    </properties>
+
+    <groupId>io.osv</groupId>
+    <artifactId>java-parent</artifactId>
+    <version>${version}</version>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>runjava-common</module>
+        <module>runjava-isolated</module>
+        <module>runjava-non-isolated</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-dependency-plugin</artifactId>
+            <version>2.3</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/modules/java-base/runjava-common/pom.xml b/modules/java-base/runjava-common/pom.xml
--- a/modules/java-base/runjava-common/pom.xml
+++ b/modules/java-base/runjava-common/pom.xml
@@ -10,10 +10,6 @@
         <version>${version}</version>
     </parent>

-    <artifactId>cloudius</artifactId>
+    <artifactId>runjava-common</artifactId>
     <packaging>jar</packaging>
-
-    <build>
-        <finalName>cloudius</finalName>
-    </build>
 </project>
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java b/modules/java-base/runjava-common/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/GCInfo.java b/modules/java-base/runjava-common/src/main/java/io/osv/GCInfo.java
--- a/modules/java-base/runjava-common/src/main/java/io/osv/GCInfo.java
+++ b/modules/java-base/runjava-common/src/main/java/io/osv/GCInfo.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/JavaInfo.java b/modules/java-base/runjava-common/src/main/java/io/osv/JavaInfo.java
--- a/modules/java-base/runjava-common/src/main/java/io/osv/JavaInfo.java
+++ b/modules/java-base/runjava-common/src/main/java/io/osv/JavaInfo.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/Jvm.java b/modules/java-base/runjava-common/src/main/java/io/osv/Jvm.java
--- a/modules/java-base/runjava-common/src/main/java/io/osv/Jvm.java
+++ b/modules/java-base/runjava-common/src/main/java/io/osv/Jvm.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/MainClassNotFoundException.java b/modules/java-base/runjava-common/src/main/java/io/osv/MainClassNotFoundException.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/MainClassNotFoundException.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/MainClassNotFoundException.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/OSvGCMonitor.java b/modules/java-base/runjava-common/src/main/java/io/osv/OSvGCMonitor.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/OSvGCMonitor.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/OSvGCMonitor.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/RunJvmAppHelper.java b/modules/java-base/runjava-common/src/main/java/io/osv/RunJvmAppHelper.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/RunJvmAppHelper.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/RunJvmAppHelper.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/util/ClassDiagnostics.java b/modules/java-base/runjava-common/src/main/java/io/osv/util/ClassDiagnostics.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/util/ClassDiagnostics.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/util/ClassDiagnostics.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/util/json/ArrayBuilder.java b/modules/java-base/runjava-common/src/main/java/io/osv/util/json/ArrayBuilder.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/util/json/ArrayBuilder.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/util/json/ArrayBuilder.java
null
diff --git a/modules/java-base/runjava-common/src/main/java/io/osv/util/json/JsonGenerator.java b/modules/java-base/runjava-common/src/main/java/io/osv/util/json/JsonGenerator.java --- a/modules/java-base/runjava-common/src/main/java/io/osv/util/json/JsonGenerator.java +++ b/modules/java-base/runjava-common/src/main/java/io/osv/util/json/JsonGenerator.java
null
diff --git a/modules/java-base/runjava-isolated/pom.xml b/modules/java-base/runjava-isolated/pom.xml
--- a/modules/java-base/runjava-isolated/pom.xml
+++ b/modules/java-base/runjava-isolated/pom.xml
@@ -10,11 +10,16 @@
         <version>${version}</version>
     </parent>

-    <artifactId>runjava</artifactId>
+    <artifactId>runjava-isolated</artifactId>
     <packaging>jar</packaging>

     <dependencies>
         <dependency>
+            <groupId>io.osv</groupId>
+            <artifactId>runjava-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>cglib</groupId>
             <artifactId>cglib</artifactId>
             <version>3.1</version>
@@ -29,7 +34,7 @@
                     <descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
                     </descriptorRefs>
-                    <finalName>runjava</finalName>
+                    <finalName>runjava-isolated</finalName>
                     <appendAssemblyId>false</appendAssemblyId>
                     <classifier>jar</classifier>
                 </configuration>
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/Context.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/Context.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/Context.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/Context.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/ContextFailedException.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/ContextFailedException.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/ContextFailedException.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/ContextFailedException.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatedJvm.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatedJvm.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatedJvm.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatedJvm.java
@@ -188,7 +188,7 @@ public Object receive() throws InterruptedException {
         @Override
protected PermissionCollection getPermissions(CodeSource codesource) { PermissionCollection permissions = super.getPermissions(codesource); - permissions.add(new FilePermission("/java/runjava.jar", "read")); + permissions.add(new FilePermission("/java/runjava-isolated.jar", "read"));
             permissions.add(new RuntimePermission("exitVM"));
             permissions.add(new RuntimePermission("shutdownHooks"));
permissions.add(new RuntimePermission("setContextClassLoader")); diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/MultiJarLoader.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/MultiJarLoader.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/MultiJarLoader.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/MultiJarLoader.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/DefaultLogManager.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/DefaultLogManager.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/DefaultLogManager.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/DefaultLogManager.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/IsolatingLogManager.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/IsolatingLogManager.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/IsolatingLogManager.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/IsolatingLogManager.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/LogManagerWrapper.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/LogManagerWrapper.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/LogManagerWrapper.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/LogManagerWrapper.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/util/InitializationException.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/util/InitializationException.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/util/InitializationException.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/util/InitializationException.java
null
diff --git a/modules/java-base/runjava-isolated/src/main/java/io/osv/util/LazilyInitialized.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/util/LazilyInitialized.java --- a/modules/java-base/runjava-isolated/src/main/java/io/osv/util/LazilyInitialized.java +++ b/modules/java-base/runjava-isolated/src/main/java/io/osv/util/LazilyInitialized.java
null
diff --git a/modules/java-base/runjava-non-isolated/pom.xml b/modules/java-base/runjava-non-isolated/pom.xml
--- a/modules/java-base/runjava-non-isolated/pom.xml
+++ b/modules/java-base/runjava-non-isolated/pom.xml
@@ -0,0 +1,48 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                      http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>io.osv</groupId>
+        <artifactId>java-parent</artifactId>
+        <version>${version}</version>
+    </parent>
+
+    <artifactId>runjava-non-isolated</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.osv</groupId>
+            <artifactId>runjava-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <finalName>runjava-non-isolated</finalName>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <classifier>jar</classifier>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-jar-with-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java --- a/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java +++ b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java
null
diff --git a/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java --- a/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java +++ b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java
null
diff --git a/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java --- a/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java +++ b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java
null
diff --git a/modules/java-base/usr.manifest b/modules/java-base/usr.manifest
--- a/modules/java-base/usr.manifest
+++ b/modules/java-base/usr.manifest
@@ -0,0 +1,12 @@
+#
+# Copyright (C) 2013-2014 Cloudius Systems, Ltd.
+#
+# This work is open source software, licensed under the terms of the
+# BSD license as described in the LICENSE file in the top-level directory.
+#
+
+[manifest]
+/usr/lib/&/libexpat.so.1: %(miscbase)s/usr/lib64/&
+/usr/lib/&/libjpeg.so.62: %(miscbase)s/usr/lib64/&
+/usr/lib/jni/monitor.so: ${MODULE_DIR}/obj/jni/monitor.so
+/usr/lib/libosv.so: libosv.so
diff --git a/modules/java-cmd/module.py b/modules/java-cmd/module.py
--- a/modules/java-cmd/module.py
+++ b/modules/java-cmd/module.py
@@ -0,0 +1,3 @@
+from osv.modules import api
+
+api.require('java-isolated')
diff --git a/modules/java-isolated/.java.policy b/modules/java-isolated/.java.policy
--- a/modules/java-isolated/.java.policy
+++ b/modules/java-isolated/.java.policy
@@ -1,3 +1,3 @@
-grant codeBase "file:/java/runjava.jar" {
+grant codeBase "file:/java/runjava-isolated.jar" {
         permission java.security.AllPermission;
 };
diff --git a/modules/java-isolated/Makefile b/modules/java-isolated/Makefile
--- a/modules/java-isolated/Makefile
+++ b/modules/java-isolated/Makefile
@@ -0,0 +1,24 @@
+SRC = $(shell readlink -f ../..)
+
+include $(SRC)/modules/java-base/common.gmk
+
+ifeq ($(arch),aarch64)
+java-targets :=
+else
+java-targets := obj/java.so
+endif
+
+obj/java.o: $(SRC)/modules/java-base/java.cc | init
+ $(call quiet, $(CXX) $(CXXFLAGS) -o $@ -c $(SRC)/modules/java-base/java.cc -MMD, CXX $@)
+
+init:
+       @echo "  MKDIRS"
+       $(call very-quiet, mkdir -p obj)
+
+module: $(java-targets)
+ cd $(SRC)/modules/java-base && mvn --projects :runjava-common,:runjava-isolated package -DskipTests=true
+
+clean:
+       cd $(SRC)/modules/java-base && mvn clean
+       -rm -f dependency-reduced-pom.xml
+       $(call very-quiet, $(RM) -rf obj)
diff --git a/modules/java-isolated/module.py b/modules/java-isolated/module.py
--- a/modules/java-isolated/module.py
+++ b/modules/java-isolated/module.py
@@ -0,0 +1,4 @@
+from osv.modules import api
+
+api.require('java-base')
+provides = ['java-cmd']
diff --git a/modules/java-isolated/usr.manifest b/modules/java-isolated/usr.manifest
--- a/modules/java-isolated/usr.manifest
+++ b/modules/java-isolated/usr.manifest
@@ -0,0 +1,11 @@
+#
+# Copyright (C) 2013-2014 Cloudius Systems, Ltd.
+#
+# This work is open source software, licensed under the terms of the
+# BSD license as described in the LICENSE file in the top-level directory.
+#
+
+[manifest]
+/java.so: ${MODULE_DIR}/obj/java.so
+/java/runjava-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-isolated/target/runjava-isolated.jar
+/.java.policy: ${MODULE_DIR}/.java.policy
diff --git a/modules/java-mgmt/Makefile b/modules/java-mgmt/Makefile
--- a/modules/java-mgmt/Makefile
+++ b/modules/java-mgmt/Makefile
@@ -0,0 +1,23 @@
+SRC = $(shell readlink -f ../..)
+
+include $(SRC)/modules/java-base/common.gmk
+
+ifeq ($(arch),aarch64)
+java-targets :=
+else
+java-targets := obj/jni/balloon.so obj/jni/elf-loader.so obj/jni/networking.so \
+       obj/jni/stty.so obj/jni/tracepoint.so obj/jni/power.so
+endif
+
+module: all
+
+all: $(java-targets)
+
+init:
+       @echo "  MKDIRS"
+       $(call very-quiet, mkdir -p obj)
+       $(call very-quiet, mkdir -p obj/jni)
+
+clean:
+       $(call very-quiet, $(RM) -rf obj)
+       $(call very-quiet, $(RM) -rf obj/jni)
diff --git a/modules/java-mgmt/cloudius/pom.xml b/modules/java-mgmt/cloudius/pom.xml
--- a/modules/java-mgmt/cloudius/pom.xml
+++ b/modules/java-mgmt/cloudius/pom.xml
@@ -0,0 +1,30 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                      http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <version>1.0-SNAPSHOT</version>
+    </properties>
+
+    <groupId>io.osv</groupId>
+    <artifactId>cloudius</artifactId>
+    <version>${version}</version>
+    <packaging>jar</packaging>
+
+    <build>
+        <finalName>cloudius</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/Config.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/Config.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/Config.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/Config.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/balloon/Balloon.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/balloon/Balloon.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/balloon/Balloon.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/balloon/Balloon.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/Test.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/Test.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/Test.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/Test.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Networking.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Networking.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Networking.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Networking.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Arp.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Arp.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Arp.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Arp.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/DHCP.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/DHCP.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/DHCP.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/DHCP.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/IFConfig.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/IFConfig.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/IFConfig.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/IFConfig.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Route.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Route.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Route.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Route.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Callstack.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Callstack.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Callstack.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Callstack.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Counter.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Counter.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Counter.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Counter.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Exec.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Exec.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Exec.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Exec.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/IStty.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/IStty.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/IStty.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/IStty.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/MD5.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/MD5.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/MD5.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/MD5.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Power.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Power.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Power.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Power.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java --- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java +++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java
null
diff --git a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Stty.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Stty.java
--- a/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Stty.java
+++ b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Stty.java
null
diff --git a/modules/java-mgmt/jni/balloon.c b/modules/java-mgmt/jni/balloon.c
--- a/modules/java-mgmt/jni/balloon.c
+++ b/modules/java-mgmt/jni/balloon.c
null
diff --git a/modules/java-mgmt/jni/elf-loader.cc b/modules/java-mgmt/jni/elf-loader.cc
--- a/modules/java-mgmt/jni/elf-loader.cc
+++ b/modules/java-mgmt/jni/elf-loader.cc
null
diff --git a/modules/java-mgmt/jni/networking.cc b/modules/java-mgmt/jni/networking.cc
--- a/modules/java-mgmt/jni/networking.cc
+++ b/modules/java-mgmt/jni/networking.cc
null
diff --git a/modules/java-mgmt/jni/power.cc b/modules/java-mgmt/jni/power.cc
--- a/modules/java-mgmt/jni/power.cc
+++ b/modules/java-mgmt/jni/power.cc
null
diff --git a/modules/java-mgmt/jni/stty.c b/modules/java-mgmt/jni/stty.c
--- a/modules/java-mgmt/jni/stty.c
+++ b/modules/java-mgmt/jni/stty.c
null
diff --git a/modules/java-mgmt/jni/tracepoint.cc b/modules/java-mgmt/jni/tracepoint.cc
--- a/modules/java-mgmt/jni/tracepoint.cc
+++ b/modules/java-mgmt/jni/tracepoint.cc
null
diff --git a/modules/java-mgmt/jni/tracepoint.hh b/modules/java-mgmt/jni/tracepoint.hh
--- a/modules/java-mgmt/jni/tracepoint.hh
+++ b/modules/java-mgmt/jni/tracepoint.hh
null
diff --git a/modules/java-mgmt/usr.manifest b/modules/java-mgmt/usr.manifest
--- a/modules/java-mgmt/usr.manifest
+++ b/modules/java-mgmt/usr.manifest
@@ -0,0 +1,8 @@
+[manifest]
+/usr/lib/jni/balloon.so: ${MODULE_DIR}/obj/jni/balloon.so
+/usr/lib/jni/elf-loader.so: ${MODULE_DIR}/obj/jni/elf-loader.so
+/usr/lib/jni/networking.so: ${MODULE_DIR}/obj/jni/networking.so
+/usr/lib/jni/stty.so: ${MODULE_DIR}/obj/jni/stty.so
+/usr/lib/jni/tracepoint.so: ${MODULE_DIR}/obj/jni/stty.so
+/usr/lib/jni/power.so: ${MODULE_DIR}/obj/jni/power.so
+/java/cloudius.jar: ${MODULE_DIR}/cloudius/target/cloudius.jar
diff --git a/modules/java-non-isolated/.java.policy b/modules/java-non-isolated/.java.policy
--- a/modules/java-non-isolated/.java.policy
+++ b/modules/java-non-isolated/.java.policy
@@ -1,3 +1,3 @@
-grant codeBase "file:/java/runjava.jar" {
+grant codeBase "file:/java/runjava-non-isolated.jar" {
         permission java.security.AllPermission;
 };
diff --git a/modules/java-non-isolated/Makefile b/modules/java-non-isolated/Makefile
--- a/modules/java-non-isolated/Makefile
+++ b/modules/java-non-isolated/Makefile
@@ -1,10 +1,24 @@
-# TODO: need to move compilation of $(java-targets) from the main makefile
-# to here. Unfortunately, compiling with OSv header files is a big mess,
-# and much easier to do it in the main OSv makefile :-(
 SRC = $(shell readlink -f ../..)
-module:
-       cd $(SRC)/java && mvn package -DskipTests=true
+
+include $(SRC)/modules/java-base/common.gmk
+
+ifeq ($(arch),aarch64)
+java-targets :=
+else
+java-targets := obj/java_non_isolated.so
+endif
+
+obj/java_non_isolated.o: $(SRC)/modules/java-base/java.cc | init
+ $(call quiet, $(CXX) $(CXXFLAGS) -DRUN_JAVA_NON_ISOLATED -o $@ -c $(SRC)/modules/java-base/java.cc -MMD, CXX $@)
+
+init:
+       @echo "  MKDIRS"
+       $(call very-quiet, mkdir -p obj)
+
+module: $(java-targets)
+ cd $(SRC)/modules/java-base && mvn --projects :runjava-common,:runjava-non-isolated package -DskipTests=true

 clean:
-       cd $(SRC)/java && mvn clean
+       cd $(SRC)/modules/java-base && mvn clean
        -rm -f dependency-reduced-pom.xml
+       $(call very-quiet, $(RM) -rf obj)
diff --git a/modules/java-non-isolated/module.py b/modules/java-non-isolated/module.py
--- a/modules/java-non-isolated/module.py
+++ b/modules/java-non-isolated/module.py
@@ -1,28 +1,5 @@
-from osv.modules.filemap import FileMap
 from osv.modules import api
-import os, os.path

-usr_files = FileMap()
-
-provides = ['java']
-
-non_isolated_jvm = True
-
-api.require('fonts')
-api.require('ca-certificates')
-api.require('libz')
-api.require('josvsym')
-api.require('httpserver-jolokia-plugin')
-api.require('httpserver-jvm-plugin')
-
-jdkdir = os.path.basename(os.path.expandvars('${jdkbase}'))
-
-usr_files.add('${jdkbase}').to('/usr/lib/jvm/java') \
-    .include('lib/**') \
-    .include('jre/**') \
-    .exclude('jre/lib/security/cacerts') \
-    .exclude('jre/lib/audio/**')
-
-usr_files.link('/usr/lib/jvm/' + jdkdir).to('java')
-usr_files.link('/usr/lib/jvm/jre').to('java/jre')
-usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts')
+java_base = api.require('java-base')
+java_base.non_isolated_jvm = True
+provides = ['java-cmd']
diff --git a/modules/java-non-isolated/usr.manifest b/modules/java-non-isolated/usr.manifest
--- a/modules/java-non-isolated/usr.manifest
+++ b/modules/java-non-isolated/usr.manifest
@@ -6,17 +6,6 @@
 #

 [manifest]
-/usr/lib/&/libexpat.so.1: %(miscbase)s/usr/lib64/&
-/usr/lib/&/libjpeg.so.62: %(miscbase)s/usr/lib64/&
-/usr/lib/jni/balloon.so: java/jni/balloon.so
-/usr/lib/jni/monitor.so: java/jni/monitor.so
-/usr/lib/&/jni/elf-loader.so: java/&
-/usr/lib/&/jni/networking.so: java/&
-/usr/lib/&/jni/stty.so: java/&
-/usr/lib/&/jni/tracepoint.so: java/&
-/usr/lib/&/jni/power.so: java/&
-/java.so: java/jvm/java_non_isolated.so
-/usr/lib/libosv.so: libosv.so
-/java/runjava.jar: ${OSV_BASE}/java/runjava/target/runjava.jar
-/java/cloudius.jar: ${OSV_BASE}/java/cloudius/target/cloudius.jar
-/.java.policy: ${OSV_BASE}/modules/java/.java.policy
+/java.so: ${MODULE_DIR}/obj/java_non_isolated.so
+/java/runjava-non-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-non-isolated/target/runjava-non-isolated.jar
+/.java.policy: ${MODULE_DIR}/.java.policy
diff --git a/modules/java-tests/.java.policy b/modules/java-tests/.java.policy
--- a/modules/java-tests/.java.policy
+++ b/modules/java-tests/.java.policy
@@ -0,0 +1,6 @@
+grant codeBase "file:/java/runjava-non-isolated.jar" {
+        permission java.security.AllPermission;
+};
+grant codeBase "file:/java/runjava-isolated.jar" {
+        permission java.security.AllPermission;
+};
\ No newline at end of file
diff --git a/modules/java-tests/Makefile b/modules/java-tests/Makefile
--- a/modules/java-tests/Makefile
+++ b/modules/java-tests/Makefile
@@ -0,0 +1,26 @@
+SRC = $(shell readlink -f ../..)
+include $(SRC)/modules/java-base/common.gmk
+
+ifeq ($(arch),aarch64)
+java-targets :=
+else
+java-targets := obj/java.so obj/java_non_isolated.so
+endif
+
+obj/java.o: $(SRC)/modules/java-base/java.cc | init
+ $(call quiet, $(CXX) $(CXXFLAGS) -o $@ -c $(SRC)/modules/java-base/java.cc -MMD, CXX $@)
+
+obj/java_non_isolated.o: $(SRC)/modules/java-base/java.cc | init
+ $(call quiet, $(CXX) $(CXXFLAGS) -DRUN_JAVA_NON_ISOLATED -o $@ -c $(SRC)/modules/java-base/java.cc -MMD, CXX $@)
+
+init:
+       @echo "  MKDIRS"
+       $(call very-quiet, mkdir -p obj)
+
+module: $(java-targets)
+       cd $(SRC)/modules/java-tests && mvn package -DskipTests=true
+
+clean:
+       cd $(SRC)/modules/java-tests && mvn clean
+       -rm -f dependency-reduced-pom.xml
+       $(call very-quiet, $(RM) -rf obj)
diff --git a/modules/java-tests/module.py b/modules/java-tests/module.py
--- a/modules/java-tests/module.py
+++ b/modules/java-tests/module.py
@@ -1,19 +1,29 @@
 from osv.modules import api
 from osv.modules.filemap import FileMap
+import os, os.path

-api.require('java')
+api.require('java-base')
+
+usr_files = FileMap()
+jdkdir = os.path.basename(os.path.expandvars('${jdkbase}'))
+
+usr_files.add('${jdkbase}').to('/usr/lib/jvm/java') \
+    .include('lib/**') \
+    .include('jre/**') \
+    .exclude('jre/lib/security/cacerts') \
+    .exclude('jre/lib/audio/**')
+
+usr_files.link('/usr/lib/jvm/' + jdkdir).to('java')
+usr_files.link('/usr/lib/jvm/jre').to('java/jre')
+usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts')

 _jar = '/tests/java/tests.jar'
 _isolates_jar = '/tests/java/isolates.jar'

-usr_files = FileMap()
-usr_files.add('${OSV_BASE}/java/tests/target/runjava-tests.jar').to(_jar)
-usr_files.add('${OSV_BASE}/java/tests-isolates/target/tests-isolates-jar-with-dependencies.jar').to(_isolates_jar)
+usr_files.add('${OSV_BASE}/modules/java-tests/tests/target/runjava-tests.jar').to(_jar)
+usr_files.add('${OSV_BASE}/modules/java-tests/tests-isolates/target/tests-isolates-jar-with-dependencies.jar').to(_isolates_jar)

-usr_files.add('${OSV_BASE}/java/tests/target/classes/tests/ClassPutInRoot.class').to('/tests/ClassPutInRoot.class')
+usr_files.add('${OSV_BASE}/modules/java-tests/tests/target/classes/tests/ClassPutInRoot.class').to('/tests/ClassPutInRoot.class')

-usr_files.add('${OSV_BASE}/java/tests-jre-extension/target/tests-jre-extension.jar') \ +usr_files.add('${OSV_BASE}/modules/java-tests/tests-jre-extension/target/tests-jre-extension.jar') \
     .to('/usr/lib/jvm/java/jre/lib/ext/tests-jre-extension.jar')
-
-default = api.run_java(classpath=[_jar, _isolates_jar],
- args=['-Disolates.jar=' + _isolates_jar, 'org.junit.runner.JUnitCore', 'io.osv.AllTests'])
diff --git a/modules/java-tests/pom.xml b/modules/java-tests/pom.xml
--- a/modules/java-tests/pom.xml
+++ b/modules/java-tests/pom.xml
@@ -9,17 +9,17 @@
     </properties>

     <groupId>io.osv</groupId>
-    <artifactId>java-parent</artifactId>
+    <artifactId>java-tests-parent</artifactId>
     <version>${version}</version>
     <packaging>pom</packaging>

     <modules>
-        <module>cloudius</module>
-        <module>runjava</module>
+        <module>../java-base/runjava-common</module>
+        <module>../java-base/runjava-non-isolated</module>
+        <module>../java-base/runjava-isolated</module>
         <module>tests</module>
         <module>tests-isolates</module>
         <module>tests-jre-extension</module>
-        <module>jolokia-agent</module>
     </modules>

     <dependencies>
diff --git a/modules/java-tests/tests-isolates/pom.xml b/modules/java-tests/tests-isolates/pom.xml
--- a/modules/java-tests/tests-isolates/pom.xml
+++ b/modules/java-tests/tests-isolates/pom.xml
@@ -6,7 +6,7 @@

     <parent>
         <groupId>io.osv</groupId>
-        <artifactId>java-parent</artifactId>
+        <artifactId>java-tests-parent</artifactId>
         <version>${version}</version>
     </parent>

@@ -16,7 +16,14 @@
     <dependencies>
         <dependency>
             <groupId>io.osv</groupId>
-            <artifactId>runjava</artifactId>
+            <artifactId>runjava-isolated</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.osv</groupId>
+            <artifactId>runjava-non-isolated</artifactId>
+            <version>1.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/ClassFinder.java b/modules/java-tests/tests-isolates/src/main/java/tests/ClassFinder.java
--- a/modules/java-tests/tests-isolates/src/main/java/tests/ClassFinder.java
+++ b/modules/java-tests/tests-isolates/src/main/java/tests/ClassFinder.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java b/modules/java-tests/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java --- a/modules/java-tests/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java +++ b/modules/java-tests/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/FieldTester.java b/modules/java-tests/tests-isolates/src/main/java/tests/FieldTester.java
--- a/modules/java-tests/tests-isolates/src/main/java/tests/FieldTester.java
+++ b/modules/java-tests/tests-isolates/src/main/java/tests/FieldTester.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/LoggingProcess.java b/modules/java-tests/tests-isolates/src/main/java/tests/LoggingProcess.java --- a/modules/java-tests/tests-isolates/src/main/java/tests/LoggingProcess.java +++ b/modules/java-tests/tests-isolates/src/main/java/tests/LoggingProcess.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java b/modules/java-tests/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java --- a/modules/java-tests/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java +++ b/modules/java-tests/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/PropertyReader.java b/modules/java-tests/tests-isolates/src/main/java/tests/PropertyReader.java --- a/modules/java-tests/tests-isolates/src/main/java/tests/PropertyReader.java +++ b/modules/java-tests/tests-isolates/src/main/java/tests/PropertyReader.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/PropertySetter.java b/modules/java-tests/tests-isolates/src/main/java/tests/PropertySetter.java --- a/modules/java-tests/tests-isolates/src/main/java/tests/PropertySetter.java +++ b/modules/java-tests/tests-isolates/src/main/java/tests/PropertySetter.java
null
diff --git a/modules/java-tests/tests-isolates/src/main/java/tests/StaticFieldSetter.java b/modules/java-tests/tests-isolates/src/main/java/tests/StaticFieldSetter.java --- a/modules/java-tests/tests-isolates/src/main/java/tests/StaticFieldSetter.java +++ b/modules/java-tests/tests-isolates/src/main/java/tests/StaticFieldSetter.java
null
diff --git a/modules/java-tests/tests-jre-extension/pom.xml b/modules/java-tests/tests-jre-extension/pom.xml
--- a/modules/java-tests/tests-jre-extension/pom.xml
+++ b/modules/java-tests/tests-jre-extension/pom.xml
@@ -6,7 +6,7 @@

     <parent>
         <groupId>io.osv</groupId>
-        <artifactId>java-parent</artifactId>
+        <artifactId>java-tests-parent</artifactId>
         <version>${version}</version>
     </parent>

diff --git a/modules/java-tests/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java b/modules/java-tests/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java --- a/modules/java-tests/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java +++ b/modules/java-tests/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java
null
diff --git a/modules/java-tests/tests/pom.xml b/modules/java-tests/tests/pom.xml
--- a/modules/java-tests/tests/pom.xml
+++ b/modules/java-tests/tests/pom.xml
@@ -6,7 +6,7 @@

     <parent>
         <groupId>io.osv</groupId>
-        <artifactId>java-parent</artifactId>
+        <artifactId>java-tests-parent</artifactId>
         <version>${version}</version>
     </parent>

@@ -28,7 +28,14 @@
         </dependency>
         <dependency>
             <groupId>io.osv</groupId>
-            <artifactId>runjava</artifactId>
+            <artifactId>runjava-isolated</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.osv</groupId>
+            <artifactId>runjava-non-isolated</artifactId>
+            <version>1.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java b/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java --- a/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java +++ b/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java b/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java --- a/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java +++ b/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java --- a/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java +++ b/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java --- a/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java +++ b/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/LoggingIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/LoggingIsolationTest.java --- a/modules/java-tests/tests/src/main/java/io/osv/LoggingIsolationTest.java +++ b/modules/java-tests/tests/src/main/java/io/osv/LoggingIsolationTest.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java --- a/modules/java-tests/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java +++ b/modules/java-tests/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/OsvApiTest.java b/modules/java-tests/tests/src/main/java/io/osv/OsvApiTest.java
--- a/modules/java-tests/tests/src/main/java/io/osv/OsvApiTest.java
+++ b/modules/java-tests/tests/src/main/java/io/osv/OsvApiTest.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/PropertyIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/PropertyIsolationTest.java --- a/modules/java-tests/tests/src/main/java/io/osv/PropertyIsolationTest.java +++ b/modules/java-tests/tests/src/main/java/io/osv/PropertyIsolationTest.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/TemporarySecurityManager.java b/modules/java-tests/tests/src/main/java/io/osv/TemporarySecurityManager.java --- a/modules/java-tests/tests/src/main/java/io/osv/TemporarySecurityManager.java +++ b/modules/java-tests/tests/src/main/java/io/osv/TemporarySecurityManager.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/TestDomainPermissions.java b/modules/java-tests/tests/src/main/java/io/osv/TestDomainPermissions.java --- a/modules/java-tests/tests/src/main/java/io/osv/TestDomainPermissions.java +++ b/modules/java-tests/tests/src/main/java/io/osv/TestDomainPermissions.java
null
diff --git a/modules/java-tests/tests/src/main/java/io/osv/TestLaunching.java b/modules/java-tests/tests/src/main/java/io/osv/TestLaunching.java
--- a/modules/java-tests/tests/src/main/java/io/osv/TestLaunching.java
+++ b/modules/java-tests/tests/src/main/java/io/osv/TestLaunching.java
null
diff --git a/modules/java-tests/tests/src/main/java/tests/ClassPresentInBothContexts.java b/modules/java-tests/tests/src/main/java/tests/ClassPresentInBothContexts.java --- a/modules/java-tests/tests/src/main/java/tests/ClassPresentInBothContexts.java +++ b/modules/java-tests/tests/src/main/java/tests/ClassPresentInBothContexts.java
null
diff --git a/modules/java-tests/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java b/modules/java-tests/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java --- a/modules/java-tests/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java +++ b/modules/java-tests/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java
null
diff --git a/modules/java-tests/tests/src/main/java/tests/ClassPutInRoot.java b/modules/java-tests/tests/src/main/java/tests/ClassPutInRoot.java
--- a/modules/java-tests/tests/src/main/java/tests/ClassPutInRoot.java
+++ b/modules/java-tests/tests/src/main/java/tests/ClassPutInRoot.java
null
diff --git a/modules/java-tests/usr.manifest b/modules/java-tests/usr.manifest
--- a/modules/java-tests/usr.manifest
+++ b/modules/java-tests/usr.manifest
@@ -6,4 +6,8 @@
 #

 [manifest]
-/java_non_isolated.so: java/jvm/java_non_isolated.so
+/java.so: ${OSV_BASE}/modules/java-tests/obj/java.so
+/java/runjava-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-isolated/target/runjava-isolated.jar +/java_non_isolated.so: ${OSV_BASE}/modules/java-tests/obj/java_non_isolated.so +/java/runjava-non-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-non-isolated/target/runjava-non-isolated.jar
+/.java.policy: ${OSV_BASE}/modules/java-tests/.java.policy
diff --git a/modules/java/Makefile b/modules/java/Makefile
--- a/modules/java/Makefile
+++ b/modules/java/Makefile
@@ -1,10 +0,0 @@
-# TODO: need to move compilation of $(java-targets) from the main makefile
-# to here. Unfortunately, compiling with OSv header files is a big mess,
-# and much easier to do it in the main OSv makefile :-(
-SRC = $(shell readlink -f ../..)
-module:
-       cd $(SRC)/java && mvn package -DskipTests=true
-
-clean:
-       cd $(SRC)/java && mvn clean
-       -rm -f dependency-reduced-pom.xml
diff --git a/modules/java/module.py b/modules/java/module.py
--- a/modules/java/module.py
+++ b/modules/java/module.py
@@ -1,24 +1,4 @@
-from osv.modules.filemap import FileMap
 from osv.modules import api
-import os, os.path

-usr_files = FileMap()
-
-api.require('fonts')
-api.require('ca-certificates')
-api.require('libz')
-api.require('josvsym')
-api.require('httpserver-jolokia-plugin')
-api.require('httpserver-jvm-plugin')
-
-jdkdir = os.path.basename(os.path.expandvars('${jdkbase}'))
-
-usr_files.add('${jdkbase}').to('/usr/lib/jvm/java') \
-    .include('lib/**') \
-    .include('jre/**') \
-    .exclude('jre/lib/security/cacerts') \
-    .exclude('jre/lib/audio/**')
-
-usr_files.link('/usr/lib/jvm/' + jdkdir).to('java')
-usr_files.link('/usr/lib/jvm/jre').to('java/jre')
-usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts')
+api.require('java-isolated')
+api.require('openjdk7')
diff --git a/modules/java/usr.manifest b/modules/java/usr.manifest
--- a/modules/java/usr.manifest
+++ b/modules/java/usr.manifest
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2013-2014 Cloudius Systems, Ltd.
-#
-# This work is open source software, licensed under the terms of the
-# BSD license as described in the LICENSE file in the top-level directory.
-#
-
-[manifest]
-/usr/lib/&/libexpat.so.1: %(miscbase)s/usr/lib64/&
-/usr/lib/&/libjpeg.so.62: %(miscbase)s/usr/lib64/&
-/usr/lib/jni/balloon.so: java/jni/balloon.so
-/usr/lib/jni/monitor.so: java/jni/monitor.so
-/usr/lib/&/jni/elf-loader.so: java/&
-/usr/lib/&/jni/networking.so: java/&
-/usr/lib/&/jni/stty.so: java/&
-/usr/lib/&/jni/tracepoint.so: java/&
-/usr/lib/&/jni/power.so: java/&
-/java.so: java/jvm/java.so
-/usr/lib/libosv.so: libosv.so
-/java/runjava.jar: ${OSV_BASE}/java/runjava/target/runjava.jar
-/java/cloudius.jar: ${OSV_BASE}/java/cloudius/target/cloudius.jar
-/.java.policy: ${OSV_BASE}/modules/java/.java.policy
diff --git a/modules/openjdk7/module.py b/modules/openjdk7/module.py
--- a/modules/openjdk7/module.py
+++ b/modules/openjdk7/module.py
@@ -0,0 +1,20 @@
+from osv.modules.filemap import FileMap
+from osv.modules import api
+import os, os.path
+
+api.require('java-cmd')
+provides = ['java']
+
+usr_files = FileMap()
+
+jdkdir = os.path.basename(os.path.expandvars('${jdkbase}'))
+
+usr_files.add('${jdkbase}').to('/usr/lib/jvm/java') \
+    .include('lib/**') \
+    .include('jre/**') \
+    .exclude('jre/lib/security/cacerts') \
+    .exclude('jre/lib/audio/**')
+
+usr_files.link('/usr/lib/jvm/' + jdkdir).to('java')
+usr_files.link('/usr/lib/jvm/jre').to('java/jre')
+usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts')
diff --git a/scripts/module.py b/scripts/module.py
--- a/scripts/module.py
+++ b/scripts/module.py
@@ -132,7 +132,7 @@ def flatten_list(elememnts):

 def get_basic_apps(apps):
     basic_apps = []
-    java = resolve.require('java')
+    java = resolve.require('java-base')
     if hasattr(java,'non_isolated_jvm') and java.non_isolated_jvm:
         _jvm = non_isolated_jvm()
     else:
@@ -203,6 +203,9 @@ def build(args):
             else:
                 api.require_running(name)

+        # Add moduless thare are implictly required if others are present
+        resolve.resolve_required_modules_if_other_is_present()
+
     modules = resolve.get_required_modules()
     modules_to_run = resolve.get_modules_to_run()

diff --git a/scripts/osv/modules/api.py b/scripts/osv/modules/api.py
--- a/scripts/osv/modules/api.py
+++ b/scripts/osv/modules/api.py
@@ -3,6 +3,7 @@

 require = resolve.require
 require_running = resolve.require_running
+require_if_other_module_present = resolve.require_if_other_module_present

 class basic_app:
     def prepare_manifest(self, build_dir, manifest_type, manifest):
diff --git a/scripts/osv/modules/resolve.py b/scripts/osv/modules/resolve.py
--- a/scripts/osv/modules/resolve.py
+++ b/scripts/osv/modules/resolve.py
@@ -7,6 +7,7 @@
 _modules = collections.OrderedDict()
 _loading_modules = list()
 _modules_to_run = dict()
+_modules_to_be_added_if_other_module_present = dict()

 class Module(object):
     def __init__(self, name, config, properties):
@@ -117,6 +118,27 @@ def fetch_module(module_config, target_dir):
     if returncode:
         raise Exception("Command failed with exit code: %d" % returncode)

+def require_if_other_module_present(module_name,other_module_name):
+ list_of_modules = _modules_to_be_added_if_other_module_present.get(other_module_name,None)
+    if(list_of_modules):
+        list_of_modules.append(module_name)
+    else:
+ _modules_to_be_added_if_other_module_present[other_module_name] = [module_name]
+
+def resolve_required_modules_if_other_is_present():
+    required_module_names = set()
+    for module_name in _modules_to_be_added_if_other_module_present.keys():
+ # If module is present then add modules that should be required implictly
+        if( _modules.get(module_name)):
+ modules_to_be_added = _modules_to_be_added_if_other_module_present[module_name]
+            for required_module_name in modules_to_be_added:
+ if(not _modules.get(required_module_name)): # If required module is not in the list already + print("Adding module '%s' because module '%s' is present" % (required_module_name, module_name))
+                    required_module_names.add(required_module_name)
+
+    for required_module_name in required_module_names:
+        require(required_module_name)
+
 def require(module_name):
     if module_name in _loading_modules:
         raise Exception("Recursive loading of '%s' module" % module_name)
@@ -152,7 +174,10 @@ def require(module_name):
     _modules[module_name] = module
     if hasattr(module, 'provides'):
         for name in getattr(module, 'provides'):
-            _modules[name] = module
+            if(_modules.get(name)):
+ raise Exception("There is more than one module included that provides: '%s'" % name )
+            else:
+                _modules[name] = module
     return module

 def require_running(module_name, run_config='*'):

--
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to