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]> --- .gitignore | 18 ++++- Makefile | 16 +---- java/jolokia-agent/pom.xml | 64 ------------------ modules/httpserver-jolokia-plugin/Makefile | 3 + .../jolokia-agent/pom.xml | 78 ++++++++++++++++++++++ .../src/main/java/io/osv/jolokia/Dispatcher.java | 0 .../java/io/osv/jolokia/RequestAndResponse.java | 0 modules/httpserver-jolokia-plugin/module.py | 2 +- modules/httpserver/module.py | 5 ++ modules/java-base/Makefile | 19 ++++++ modules/java-base/common.gmk | 46 +++++++++++++ {java/jvm => modules/java-base}/java.cc | 9 +-- {java => modules/java-base}/jni/monitor.cc | 0 {java => modules/java-base}/jni/monitor.hh | 0 modules/java-base/module.py | 5 ++ modules/java-base/pom.xml | 44 ++++++++++++ .../java-base/runjava-common}/pom.xml | 6 +- .../AppThreadTerminatedWithUncaughtException.java | 0 .../src/main/java/io/osv/GCInfo.java | 0 .../src/main/java/io/osv/JavaInfo.java | 0 .../runjava-common}/src/main/java/io/osv/Jvm.java | 0 .../java/io/osv/MainClassNotFoundException.java | 0 .../src/main/java/io/osv/OSvGCMonitor.java | 0 .../src/main/java/io/osv/RunJvmAppHelper.java | 0 .../main/java/io/osv/util/ClassDiagnostics.java | 0 .../main/java/io/osv/util/json/ArrayBuilder.java | 0 .../main/java/io/osv/util/json/JsonGenerator.java | 0 .../java-base/runjava-isolated}/pom.xml | 9 ++- .../src/main/java/io/osv/isolated/Context.java | 0 .../io/osv/isolated/ContextFailedException.java | 0 .../src/main/java/io/osv/isolated/IsolatedJvm.java | 2 +- .../isolated/IsolatingOsvSystemClassLoader.java | 0 .../main/java/io/osv/isolated/MultiJarLoader.java | 0 .../java/io/osv/isolated/RunIsolatedJvmApp.java | 0 .../main/java/io/osv/jul/DefaultLogManager.java | 0 .../main/java/io/osv/jul/IsolatingLogManager.java | 0 .../main/java/io/osv/jul/LogManagerWrapper.java | 0 .../java/io/osv/util/InitializationException.java | 0 .../main/java/io/osv/util/LazilyInitialized.java | 0 .../java-base/runjava-non-isolated}/pom.xml | 16 ++--- .../java/io/osv/nonisolated/NonIsolatedJvm.java | 0 .../NonIsolatingOsvSystemClassLoader.java | 0 .../io/osv/nonisolated/RunNonIsolatedJvmApp.java | 0 modules/{java-tests => java-base}/usr.manifest | 5 +- modules/java-cmd/module.py | 3 + modules/{java => java-isolated}/.java.policy | 2 +- modules/java-isolated/Makefile | 24 +++++++ modules/java-isolated/module.py | 4 ++ modules/{java-tests => java-isolated}/usr.manifest | 4 +- modules/java-mgmt/Makefile | 23 +++++++ modules/java-mgmt/cloudius/pom.xml | 30 +++++++++ .../src/main/java/com/cloudius/Config.java | 0 .../main/java/com/cloudius/balloon/Balloon.java | 0 .../cloudius/cli/tests/TCPConcurrentDownloads.java | 0 .../com/cloudius/cli/tests/TCPDownloadFile.java | 0 .../com/cloudius/cli/tests/TCPEchoServerTest.java | 0 .../cli/tests/TCPExternalCommunication.java | 0 .../src/main/java/com/cloudius/cli/tests/Test.java | 0 .../main/java/com/cloudius/cli/tests/TestELF.java | 0 .../java/com/cloudius/cli/tests/TestRunner.java | 0 .../main/java/com/cloudius/cli/util/ELFLoader.java | 0 .../java/com/cloudius/cli/util/Networking.java | 0 .../src/main/java/com/cloudius/cli/util/Shrew.java | 0 .../src/main/java/com/cloudius/net/Arp.java | 0 .../src/main/java/com/cloudius/net/DHCP.java | 0 .../src/main/java/com/cloudius/net/IFConfig.java | 0 .../src/main/java/com/cloudius/net/Route.java | 0 .../main/java/com/cloudius/trace/Callstack.java | 0 .../src/main/java/com/cloudius/trace/Counter.java | 0 .../main/java/com/cloudius/trace/Tracepoint.java | 0 .../src/main/java/com/cloudius/util/Exec.java | 0 .../src/main/java/com/cloudius/util/IStty.java | 0 .../src/main/java/com/cloudius/util/MD5.java | 0 .../src/main/java/com/cloudius/util/Power.java | 0 .../java/com/cloudius/util/PrintClassPath.java | 0 .../src/main/java/com/cloudius/util/Stty.java | 0 {java => modules/java-mgmt}/jni/balloon.c | 0 {java => modules/java-mgmt}/jni/elf-loader.cc | 0 {java => modules/java-mgmt}/jni/networking.cc | 0 {java => modules/java-mgmt}/jni/power.cc | 0 {java => modules/java-mgmt}/jni/stty.c | 0 {java => modules/java-mgmt}/jni/tracepoint.cc | 0 {java => modules/java-mgmt}/jni/tracepoint.hh | 0 modules/java-mgmt/usr.manifest | 8 +++ modules/java-non-isolated/.java.policy | 2 +- modules/java-non-isolated/Makefile | 26 ++++++-- modules/java-non-isolated/module.py | 29 +------- modules/java-non-isolated/usr.manifest | 17 +---- modules/java-tests/.java.policy | 6 ++ modules/java-tests/Makefile | 26 ++++++++ modules/java-tests/module.py | 28 +++++--- {java => modules/java-tests}/pom.xml | 8 +-- .../java-tests}/tests-isolates/pom.xml | 11 ++- .../src/main/java/tests/ClassFinder.java | 0 .../java/tests/ClassPresentInBothContexts.java | 0 .../src/main/java/tests/FieldTester.java | 0 .../src/main/java/tests/LoggingProcess.java | 0 .../main/java/tests/NonIsolatedLoggingProcess.java | 0 .../src/main/java/tests/PropertyReader.java | 0 .../src/main/java/tests/PropertySetter.java | 0 .../src/main/java/tests/StaticFieldSetter.java | 0 .../java-tests}/tests-jre-extension/pom.xml | 2 +- .../src/main/java/tests/SomeExtensionClass.java | 0 {java => modules/java-tests}/tests/pom.xml | 11 ++- .../java/io/osv/AllTestsThatTestIsolatedApp.java | 0 .../io/osv/AllTestsThatTestNonIsolatedApp.java | 0 .../main/java/io/osv/ClassLoaderIsolationTest.java | 0 .../io/osv/ClassLoaderWithoutIsolationTest.java | 0 .../src/main/java/io/osv/LoggingIsolationTest.java | 0 .../java/io/osv/LoggingWithoutIsolationTest.java | 0 .../tests/src/main/java/io/osv/OsvApiTest.java | 0 .../main/java/io/osv/PropertyIsolationTest.java | 0 .../main/java/io/osv/TemporarySecurityManager.java | 0 .../main/java/io/osv/TestDomainPermissions.java | 0 .../tests/src/main/java/io/osv/TestLaunching.java | 0 .../java/tests/ClassPresentInBothContexts.java | 0 .../tests/ClassPresentOnlyInParentContext.java | 0 .../tests/src/main/java/tests/ClassPutInRoot.java | 0 modules/java-tests/usr.manifest | 6 +- modules/java/Makefile | 10 --- modules/java/module.py | 24 +------ modules/java/usr.manifest | 22 ------ modules/{java => openjdk7}/module.py | 10 +-- scripts/module.py | 5 +- scripts/osv/modules/api.py | 1 + scripts/osv/modules/resolve.py | 27 +++++++- 126 files changed, 480 insertions(+), 236 deletions(-) delete mode 100644 java/jolokia-agent/pom.xml create mode 100644 modules/httpserver-jolokia-plugin/jolokia-agent/pom.xml rename {java => modules/httpserver-jolokia-plugin}/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java (100%) rename {java => modules/httpserver-jolokia-plugin}/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java (100%) create mode 100644 modules/java-base/Makefile create mode 100644 modules/java-base/common.gmk rename {java/jvm => modules/java-base}/java.cc (97%) rename {java => modules/java-base}/jni/monitor.cc (100%) rename {java => modules/java-base}/jni/monitor.hh (100%) create mode 100644 modules/java-base/module.py create mode 100644 modules/java-base/pom.xml rename {java/cloudius => modules/java-base/runjava-common}/pom.xml (81%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/GCInfo.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/JavaInfo.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/Jvm.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/MainClassNotFoundException.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/OSvGCMonitor.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/RunJvmAppHelper.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/util/ClassDiagnostics.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/util/json/ArrayBuilder.java (100%) rename {java/runjava => modules/java-base/runjava-common}/src/main/java/io/osv/util/json/JsonGenerator.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/pom.xml (90%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/isolated/Context.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/isolated/ContextFailedException.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/isolated/IsolatedJvm.java (98%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/isolated/MultiJarLoader.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/jul/DefaultLogManager.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/jul/IsolatingLogManager.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/jul/LogManagerWrapper.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/util/InitializationException.java (100%) rename {java/runjava => modules/java-base/runjava-isolated}/src/main/java/io/osv/util/LazilyInitialized.java (100%) copy {java/tests-isolates => modules/java-base/runjava-non-isolated}/pom.xml (77%) rename {java/runjava => modules/java-base/runjava-non-isolated}/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java (100%) rename {java/runjava => modules/java-base/runjava-non-isolated}/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java (100%) rename {java/runjava => modules/java-base/runjava-non-isolated}/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java (100%) copy modules/{java-tests => java-base}/usr.manifest (52%) create mode 100644 modules/java-cmd/module.py rename modules/{java => java-isolated}/.java.policy (50%) create mode 100644 modules/java-isolated/Makefile create mode 100644 modules/java-isolated/module.py copy modules/{java-tests => java-isolated}/usr.manifest (53%) create mode 100644 modules/java-mgmt/Makefile create mode 100644 modules/java-mgmt/cloudius/pom.xml rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/Config.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/balloon/Balloon.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/Test.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/util/Networking.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/net/Arp.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/net/DHCP.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/net/IFConfig.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/net/Route.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/trace/Callstack.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/trace/Counter.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/util/Exec.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/util/IStty.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/util/MD5.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/util/Power.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java (100%) rename {java => modules/java-mgmt}/cloudius/src/main/java/com/cloudius/util/Stty.java (100%) rename {java => modules/java-mgmt}/jni/balloon.c (100%) rename {java => modules/java-mgmt}/jni/elf-loader.cc (100%) rename {java => modules/java-mgmt}/jni/networking.cc (100%) rename {java => modules/java-mgmt}/jni/power.cc (100%) rename {java => modules/java-mgmt}/jni/stty.c (100%) rename {java => modules/java-mgmt}/jni/tracepoint.cc (100%) rename {java => modules/java-mgmt}/jni/tracepoint.hh (100%) create mode 100644 modules/java-mgmt/usr.manifest create mode 100644 modules/java-tests/.java.policy create mode 100644 modules/java-tests/Makefile rename {java => modules/java-tests}/pom.xml (93%) rename {java => modules/java-tests}/tests-isolates/pom.xml (80%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/ClassFinder.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/FieldTester.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/LoggingProcess.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/PropertyReader.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/PropertySetter.java (100%) rename {java => modules/java-tests}/tests-isolates/src/main/java/tests/StaticFieldSetter.java (100%) rename {java => modules/java-tests}/tests-jre-extension/pom.xml (91%) rename {java => modules/java-tests}/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java (100%) rename {java => modules/java-tests}/tests/pom.xml (89%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/LoggingIsolationTest.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/OsvApiTest.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/PropertyIsolationTest.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/TemporarySecurityManager.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/TestDomainPermissions.java (100%) rename {java => modules/java-tests}/tests/src/main/java/io/osv/TestLaunching.java (100%) rename {java => modules/java-tests}/tests/src/main/java/tests/ClassPresentInBothContexts.java (100%) rename {java => modules/java-tests}/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java (100%) rename {java => modules/java-tests}/tests/src/main/java/tests/ClassPutInRoot.java (100%) delete mode 100644 modules/java/Makefile delete mode 100644 modules/java/usr.manifest copy modules/{java => openjdk7}/module.py (75%) diff --git a/.gitignore b/.gitignore index b76d37e..7fc9553 100644 --- 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 index 6265137..cf58c0a 100644 --- 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 deleted file mode 100644 index a2b3742..0000000 --- a/java/jolokia-agent/pom.xml +++ /dev/null @@ -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 index 163ddbd..f89b02c 100644 --- 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 new file mode 100644 index 0000000..2671abf --- /dev/null +++ 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/java/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 similarity index 100% rename from java/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java rename to modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/Dispatcher.java diff --git a/java/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 similarity index 100% rename from java/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java rename to modules/httpserver-jolokia-plugin/jolokia-agent/src/main/java/io/osv/jolokia/RequestAndResponse.java diff --git a/modules/httpserver-jolokia-plugin/module.py b/modules/httpserver-jolokia-plugin/module.py index 6b858af..34f8c00 100644 --- a/modules/httpserver-jolokia-plugin/module.py +++ b/modules/httpserver-jolokia-plugin/module.py @@ -8,4 +8,4 @@ _module = '${OSV_BASE}/modules/httpserver-jolokia-plugin' 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 index ae3f041..7a83a04 100644 --- a/modules/httpserver/module.py +++ b/modules/httpserver/module.py @@ -17,6 +17,11 @@ api.require('openssl') 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 new file mode 100644 index 0000000..13c1858 --- /dev/null +++ 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 new file mode 100644 index 0000000..9331ce6 --- /dev/null +++ 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/java/jvm/java.cc b/modules/java-base/java.cc similarity index 97% rename from java/jvm/java.cc rename to modules/java-base/java.cc index e1b6da8..d448a3a 100644 --- a/java/jvm/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/java/jni/monitor.cc b/modules/java-base/jni/monitor.cc similarity index 100% rename from java/jni/monitor.cc rename to modules/java-base/jni/monitor.cc diff --git a/java/jni/monitor.hh b/modules/java-base/jni/monitor.hh similarity index 100% rename from java/jni/monitor.hh rename to modules/java-base/jni/monitor.hh diff --git a/modules/java-base/module.py b/modules/java-base/module.py new file mode 100644 index 0000000..3589a53 --- /dev/null +++ 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 new file mode 100644 index 0000000..433b9fb --- /dev/null +++ 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/java/cloudius/pom.xml b/modules/java-base/runjava-common/pom.xml similarity index 81% rename from java/cloudius/pom.xml rename to modules/java-base/runjava-common/pom.xml index 52542e8..4a22315 100644 --- a/java/cloudius/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/java/runjava/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java b/modules/java-base/runjava-common/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java similarity index 100% rename from java/runjava/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java rename to modules/java-base/runjava-common/src/main/java/io/osv/AppThreadTerminatedWithUncaughtException.java diff --git a/java/runjava/src/main/java/io/osv/GCInfo.java b/modules/java-base/runjava-common/src/main/java/io/osv/GCInfo.java similarity index 100% rename from java/runjava/src/main/java/io/osv/GCInfo.java rename to modules/java-base/runjava-common/src/main/java/io/osv/GCInfo.java diff --git a/java/runjava/src/main/java/io/osv/JavaInfo.java b/modules/java-base/runjava-common/src/main/java/io/osv/JavaInfo.java similarity index 100% rename from java/runjava/src/main/java/io/osv/JavaInfo.java rename to modules/java-base/runjava-common/src/main/java/io/osv/JavaInfo.java diff --git a/java/runjava/src/main/java/io/osv/Jvm.java b/modules/java-base/runjava-common/src/main/java/io/osv/Jvm.java similarity index 100% rename from java/runjava/src/main/java/io/osv/Jvm.java rename to modules/java-base/runjava-common/src/main/java/io/osv/Jvm.java diff --git a/java/runjava/src/main/java/io/osv/MainClassNotFoundException.java b/modules/java-base/runjava-common/src/main/java/io/osv/MainClassNotFoundException.java similarity index 100% rename from java/runjava/src/main/java/io/osv/MainClassNotFoundException.java rename to modules/java-base/runjava-common/src/main/java/io/osv/MainClassNotFoundException.java diff --git a/java/runjava/src/main/java/io/osv/OSvGCMonitor.java b/modules/java-base/runjava-common/src/main/java/io/osv/OSvGCMonitor.java similarity index 100% rename from java/runjava/src/main/java/io/osv/OSvGCMonitor.java rename to modules/java-base/runjava-common/src/main/java/io/osv/OSvGCMonitor.java diff --git a/java/runjava/src/main/java/io/osv/RunJvmAppHelper.java b/modules/java-base/runjava-common/src/main/java/io/osv/RunJvmAppHelper.java similarity index 100% rename from java/runjava/src/main/java/io/osv/RunJvmAppHelper.java rename to modules/java-base/runjava-common/src/main/java/io/osv/RunJvmAppHelper.java diff --git a/java/runjava/src/main/java/io/osv/util/ClassDiagnostics.java b/modules/java-base/runjava-common/src/main/java/io/osv/util/ClassDiagnostics.java similarity index 100% rename from java/runjava/src/main/java/io/osv/util/ClassDiagnostics.java rename to modules/java-base/runjava-common/src/main/java/io/osv/util/ClassDiagnostics.java diff --git a/java/runjava/src/main/java/io/osv/util/json/ArrayBuilder.java b/modules/java-base/runjava-common/src/main/java/io/osv/util/json/ArrayBuilder.java similarity index 100% rename from java/runjava/src/main/java/io/osv/util/json/ArrayBuilder.java rename to modules/java-base/runjava-common/src/main/java/io/osv/util/json/ArrayBuilder.java diff --git a/java/runjava/src/main/java/io/osv/util/json/JsonGenerator.java b/modules/java-base/runjava-common/src/main/java/io/osv/util/json/JsonGenerator.java similarity index 100% rename from java/runjava/src/main/java/io/osv/util/json/JsonGenerator.java rename to modules/java-base/runjava-common/src/main/java/io/osv/util/json/JsonGenerator.java diff --git a/java/runjava/pom.xml b/modules/java-base/runjava-isolated/pom.xml similarity index 90% rename from java/runjava/pom.xml rename to modules/java-base/runjava-isolated/pom.xml index feed5f1..5129011 100644 --- a/java/runjava/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/java/runjava/src/main/java/io/osv/isolated/Context.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/Context.java similarity index 100% rename from java/runjava/src/main/java/io/osv/isolated/Context.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/Context.java diff --git a/java/runjava/src/main/java/io/osv/isolated/ContextFailedException.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/ContextFailedException.java similarity index 100% rename from java/runjava/src/main/java/io/osv/isolated/ContextFailedException.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/ContextFailedException.java diff --git a/java/runjava/src/main/java/io/osv/isolated/IsolatedJvm.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatedJvm.java similarity index 98% rename from java/runjava/src/main/java/io/osv/isolated/IsolatedJvm.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatedJvm.java index 217d00a..2e820e3 100644 --- a/java/runjava/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 class IsolatedJvm extends Jvm<Context> { @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/java/runjava/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java similarity index 100% rename from java/runjava/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/IsolatingOsvSystemClassLoader.java diff --git a/java/runjava/src/main/java/io/osv/isolated/MultiJarLoader.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/MultiJarLoader.java similarity index 100% rename from java/runjava/src/main/java/io/osv/isolated/MultiJarLoader.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/MultiJarLoader.java diff --git a/java/runjava/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java similarity index 100% rename from java/runjava/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/isolated/RunIsolatedJvmApp.java diff --git a/java/runjava/src/main/java/io/osv/jul/DefaultLogManager.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/DefaultLogManager.java similarity index 100% rename from java/runjava/src/main/java/io/osv/jul/DefaultLogManager.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/jul/DefaultLogManager.java diff --git a/java/runjava/src/main/java/io/osv/jul/IsolatingLogManager.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/IsolatingLogManager.java similarity index 100% rename from java/runjava/src/main/java/io/osv/jul/IsolatingLogManager.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/jul/IsolatingLogManager.java diff --git a/java/runjava/src/main/java/io/osv/jul/LogManagerWrapper.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/jul/LogManagerWrapper.java similarity index 100% rename from java/runjava/src/main/java/io/osv/jul/LogManagerWrapper.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/jul/LogManagerWrapper.java diff --git a/java/runjava/src/main/java/io/osv/util/InitializationException.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/util/InitializationException.java similarity index 100% rename from java/runjava/src/main/java/io/osv/util/InitializationException.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/util/InitializationException.java diff --git a/java/runjava/src/main/java/io/osv/util/LazilyInitialized.java b/modules/java-base/runjava-isolated/src/main/java/io/osv/util/LazilyInitialized.java similarity index 100% rename from java/runjava/src/main/java/io/osv/util/LazilyInitialized.java rename to modules/java-base/runjava-isolated/src/main/java/io/osv/util/LazilyInitialized.java diff --git a/java/tests-isolates/pom.xml b/modules/java-base/runjava-non-isolated/pom.xml similarity index 77% copy from java/tests-isolates/pom.xml copy to modules/java-base/runjava-non-isolated/pom.xml index 249e091..d7f503a 100644 --- a/java/tests-isolates/pom.xml +++ b/modules/java-base/runjava-non-isolated/pom.xml @@ -10,23 +10,18 @@ <version>${version}</version> </parent> - <artifactId>tests-isolates</artifactId> + <artifactId>runjava-non-isolated</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>io.osv</groupId> - <artifactId>runjava</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> + <artifactId>runjava-common</artifactId> + <version>${project.version}</version> </dependency> </dependencies> <build> - <finalName>tests-isolates</finalName> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> @@ -34,11 +29,14 @@ <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>compile</phase> + <phase>package</phase> <goals> <goal>single</goal> </goals> diff --git a/java/runjava/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java similarity index 100% rename from java/runjava/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java rename to modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatedJvm.java diff --git a/java/runjava/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java similarity index 100% rename from java/runjava/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java rename to modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/NonIsolatingOsvSystemClassLoader.java diff --git a/java/runjava/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java b/modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java similarity index 100% rename from java/runjava/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java rename to modules/java-base/runjava-non-isolated/src/main/java/io/osv/nonisolated/RunNonIsolatedJvmApp.java diff --git a/modules/java-tests/usr.manifest b/modules/java-base/usr.manifest similarity index 52% copy from modules/java-tests/usr.manifest copy to modules/java-base/usr.manifest index 0dca54e..535f0b2 100644 --- a/modules/java-tests/usr.manifest +++ b/modules/java-base/usr.manifest @@ -6,4 +6,7 @@ # [manifest] -/java_non_isolated.so: java/jvm/java_non_isolated.so +/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 new file mode 100644 index 0000000..2e22534 --- /dev/null +++ b/modules/java-cmd/module.py @@ -0,0 +1,3 @@ +from osv.modules import api + +api.require('java-isolated') diff --git a/modules/java/.java.policy b/modules/java-isolated/.java.policy similarity index 50% rename from modules/java/.java.policy rename to modules/java-isolated/.java.policy index af1cdc7..fb6aae4 100644 --- a/modules/java/.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 new file mode 100644 index 0000000..a3ac9f4 --- /dev/null +++ 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 new file mode 100644 index 0000000..b28f242 --- /dev/null +++ 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-tests/usr.manifest b/modules/java-isolated/usr.manifest similarity index 53% copy from modules/java-tests/usr.manifest copy to modules/java-isolated/usr.manifest index 0dca54e..c98ba62 100644 --- a/modules/java-tests/usr.manifest +++ b/modules/java-isolated/usr.manifest @@ -6,4 +6,6 @@ # [manifest] -/java_non_isolated.so: java/jvm/java_non_isolated.so +/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 new file mode 100644 index 0000000..3bee16a --- /dev/null +++ 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 new file mode 100644 index 0000000..a82ba7b --- /dev/null +++ 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/java/cloudius/src/main/java/com/cloudius/Config.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/Config.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/Config.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/Config.java diff --git a/java/cloudius/src/main/java/com/cloudius/balloon/Balloon.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/balloon/Balloon.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/balloon/Balloon.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/balloon/Balloon.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPConcurrentDownloads.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPDownloadFile.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPEchoServerTest.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TCPExternalCommunication.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/Test.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/Test.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/Test.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/Test.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestELF.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/tests/TestRunner.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/ELFLoader.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/util/Networking.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Networking.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/util/Networking.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Networking.java diff --git a/java/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/cli/util/Shrew.java diff --git a/java/cloudius/src/main/java/com/cloudius/net/Arp.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Arp.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/net/Arp.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Arp.java diff --git a/java/cloudius/src/main/java/com/cloudius/net/DHCP.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/DHCP.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/net/DHCP.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/DHCP.java diff --git a/java/cloudius/src/main/java/com/cloudius/net/IFConfig.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/IFConfig.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/net/IFConfig.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/IFConfig.java diff --git a/java/cloudius/src/main/java/com/cloudius/net/Route.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Route.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/net/Route.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/net/Route.java diff --git a/java/cloudius/src/main/java/com/cloudius/trace/Callstack.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Callstack.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/trace/Callstack.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Callstack.java diff --git a/java/cloudius/src/main/java/com/cloudius/trace/Counter.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Counter.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/trace/Counter.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Counter.java diff --git a/java/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/trace/Tracepoint.java diff --git a/java/cloudius/src/main/java/com/cloudius/util/Exec.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Exec.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/util/Exec.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Exec.java diff --git a/java/cloudius/src/main/java/com/cloudius/util/IStty.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/IStty.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/util/IStty.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/IStty.java diff --git a/java/cloudius/src/main/java/com/cloudius/util/MD5.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/MD5.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/util/MD5.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/MD5.java diff --git a/java/cloudius/src/main/java/com/cloudius/util/Power.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Power.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/util/Power.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Power.java diff --git a/java/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/PrintClassPath.java diff --git a/java/cloudius/src/main/java/com/cloudius/util/Stty.java b/modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Stty.java similarity index 100% rename from java/cloudius/src/main/java/com/cloudius/util/Stty.java rename to modules/java-mgmt/cloudius/src/main/java/com/cloudius/util/Stty.java diff --git a/java/jni/balloon.c b/modules/java-mgmt/jni/balloon.c similarity index 100% rename from java/jni/balloon.c rename to modules/java-mgmt/jni/balloon.c diff --git a/java/jni/elf-loader.cc b/modules/java-mgmt/jni/elf-loader.cc similarity index 100% rename from java/jni/elf-loader.cc rename to modules/java-mgmt/jni/elf-loader.cc diff --git a/java/jni/networking.cc b/modules/java-mgmt/jni/networking.cc similarity index 100% rename from java/jni/networking.cc rename to modules/java-mgmt/jni/networking.cc diff --git a/java/jni/power.cc b/modules/java-mgmt/jni/power.cc similarity index 100% rename from java/jni/power.cc rename to modules/java-mgmt/jni/power.cc diff --git a/java/jni/stty.c b/modules/java-mgmt/jni/stty.c similarity index 100% rename from java/jni/stty.c rename to modules/java-mgmt/jni/stty.c diff --git a/java/jni/tracepoint.cc b/modules/java-mgmt/jni/tracepoint.cc similarity index 100% rename from java/jni/tracepoint.cc rename to modules/java-mgmt/jni/tracepoint.cc diff --git a/java/jni/tracepoint.hh b/modules/java-mgmt/jni/tracepoint.hh similarity index 100% rename from java/jni/tracepoint.hh rename to modules/java-mgmt/jni/tracepoint.hh diff --git a/modules/java-mgmt/usr.manifest b/modules/java-mgmt/usr.manifest new file mode 100644 index 0000000..2a2544f --- /dev/null +++ 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 index af1cdc7..30a4cf3 100644 --- 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 index d5d916e..519781e 100644 --- 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 index 1f5b401..bd2ab16 100644 --- 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 index cd02161..00eab90 100644 --- 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 new file mode 100644 index 0000000..27ae355 --- /dev/null +++ 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 new file mode 100644 index 0000000..7ec7028 --- /dev/null +++ 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 index 5ed04b4..18d64ab 100644 --- 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/java/pom.xml b/modules/java-tests/pom.xml similarity index 93% rename from java/pom.xml rename to modules/java-tests/pom.xml index 1353b4c..98a9984 100644 --- a/java/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/java/tests-isolates/pom.xml b/modules/java-tests/tests-isolates/pom.xml similarity index 80% rename from java/tests-isolates/pom.xml rename to modules/java-tests/tests-isolates/pom.xml index 249e091..191552d 100644 --- a/java/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/java/tests-isolates/src/main/java/tests/ClassFinder.java b/modules/java-tests/tests-isolates/src/main/java/tests/ClassFinder.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/ClassFinder.java rename to modules/java-tests/tests-isolates/src/main/java/tests/ClassFinder.java diff --git a/java/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java b/modules/java-tests/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java rename to modules/java-tests/tests-isolates/src/main/java/tests/ClassPresentInBothContexts.java diff --git a/java/tests-isolates/src/main/java/tests/FieldTester.java b/modules/java-tests/tests-isolates/src/main/java/tests/FieldTester.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/FieldTester.java rename to modules/java-tests/tests-isolates/src/main/java/tests/FieldTester.java diff --git a/java/tests-isolates/src/main/java/tests/LoggingProcess.java b/modules/java-tests/tests-isolates/src/main/java/tests/LoggingProcess.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/LoggingProcess.java rename to modules/java-tests/tests-isolates/src/main/java/tests/LoggingProcess.java diff --git a/java/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java b/modules/java-tests/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java rename to modules/java-tests/tests-isolates/src/main/java/tests/NonIsolatedLoggingProcess.java diff --git a/java/tests-isolates/src/main/java/tests/PropertyReader.java b/modules/java-tests/tests-isolates/src/main/java/tests/PropertyReader.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/PropertyReader.java rename to modules/java-tests/tests-isolates/src/main/java/tests/PropertyReader.java diff --git a/java/tests-isolates/src/main/java/tests/PropertySetter.java b/modules/java-tests/tests-isolates/src/main/java/tests/PropertySetter.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/PropertySetter.java rename to modules/java-tests/tests-isolates/src/main/java/tests/PropertySetter.java diff --git a/java/tests-isolates/src/main/java/tests/StaticFieldSetter.java b/modules/java-tests/tests-isolates/src/main/java/tests/StaticFieldSetter.java similarity index 100% rename from java/tests-isolates/src/main/java/tests/StaticFieldSetter.java rename to modules/java-tests/tests-isolates/src/main/java/tests/StaticFieldSetter.java diff --git a/java/tests-jre-extension/pom.xml b/modules/java-tests/tests-jre-extension/pom.xml similarity index 91% rename from java/tests-jre-extension/pom.xml rename to modules/java-tests/tests-jre-extension/pom.xml index 84a861e..3d01deb 100644 --- a/java/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/java/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java b/modules/java-tests/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java similarity index 100% rename from java/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java rename to modules/java-tests/tests-jre-extension/src/main/java/tests/SomeExtensionClass.java diff --git a/java/tests/pom.xml b/modules/java-tests/tests/pom.xml similarity index 89% rename from java/tests/pom.xml rename to modules/java-tests/tests/pom.xml index f359f43..e2f25d1 100644 --- a/java/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/java/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java b/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java similarity index 100% rename from java/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java rename to modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestIsolatedApp.java diff --git a/java/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java b/modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java similarity index 100% rename from java/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java rename to modules/java-tests/tests/src/main/java/io/osv/AllTestsThatTestNonIsolatedApp.java diff --git a/java/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java similarity index 100% rename from java/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java rename to modules/java-tests/tests/src/main/java/io/osv/ClassLoaderIsolationTest.java diff --git a/java/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java similarity index 100% rename from java/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java rename to modules/java-tests/tests/src/main/java/io/osv/ClassLoaderWithoutIsolationTest.java diff --git a/java/tests/src/main/java/io/osv/LoggingIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/LoggingIsolationTest.java similarity index 100% rename from java/tests/src/main/java/io/osv/LoggingIsolationTest.java rename to modules/java-tests/tests/src/main/java/io/osv/LoggingIsolationTest.java diff --git a/java/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java similarity index 100% rename from java/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java rename to modules/java-tests/tests/src/main/java/io/osv/LoggingWithoutIsolationTest.java diff --git a/java/tests/src/main/java/io/osv/OsvApiTest.java b/modules/java-tests/tests/src/main/java/io/osv/OsvApiTest.java similarity index 100% rename from java/tests/src/main/java/io/osv/OsvApiTest.java rename to modules/java-tests/tests/src/main/java/io/osv/OsvApiTest.java diff --git a/java/tests/src/main/java/io/osv/PropertyIsolationTest.java b/modules/java-tests/tests/src/main/java/io/osv/PropertyIsolationTest.java similarity index 100% rename from java/tests/src/main/java/io/osv/PropertyIsolationTest.java rename to modules/java-tests/tests/src/main/java/io/osv/PropertyIsolationTest.java diff --git a/java/tests/src/main/java/io/osv/TemporarySecurityManager.java b/modules/java-tests/tests/src/main/java/io/osv/TemporarySecurityManager.java similarity index 100% rename from java/tests/src/main/java/io/osv/TemporarySecurityManager.java rename to modules/java-tests/tests/src/main/java/io/osv/TemporarySecurityManager.java diff --git a/java/tests/src/main/java/io/osv/TestDomainPermissions.java b/modules/java-tests/tests/src/main/java/io/osv/TestDomainPermissions.java similarity index 100% rename from java/tests/src/main/java/io/osv/TestDomainPermissions.java rename to modules/java-tests/tests/src/main/java/io/osv/TestDomainPermissions.java diff --git a/java/tests/src/main/java/io/osv/TestLaunching.java b/modules/java-tests/tests/src/main/java/io/osv/TestLaunching.java similarity index 100% rename from java/tests/src/main/java/io/osv/TestLaunching.java rename to modules/java-tests/tests/src/main/java/io/osv/TestLaunching.java diff --git a/java/tests/src/main/java/tests/ClassPresentInBothContexts.java b/modules/java-tests/tests/src/main/java/tests/ClassPresentInBothContexts.java similarity index 100% rename from java/tests/src/main/java/tests/ClassPresentInBothContexts.java rename to modules/java-tests/tests/src/main/java/tests/ClassPresentInBothContexts.java diff --git a/java/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java b/modules/java-tests/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java similarity index 100% rename from java/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java rename to modules/java-tests/tests/src/main/java/tests/ClassPresentOnlyInParentContext.java diff --git a/java/tests/src/main/java/tests/ClassPutInRoot.java b/modules/java-tests/tests/src/main/java/tests/ClassPutInRoot.java similarity index 100% rename from java/tests/src/main/java/tests/ClassPutInRoot.java rename to modules/java-tests/tests/src/main/java/tests/ClassPutInRoot.java diff --git a/modules/java-tests/usr.manifest b/modules/java-tests/usr.manifest index 0dca54e..8145b19 100644 --- 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 deleted file mode 100644 index d5d916e..0000000 --- a/modules/java/Makefile +++ /dev/null @@ -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 index 20891d1..823d498 100644 --- 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 deleted file mode 100644 index d19879e..0000000 --- a/modules/java/usr.manifest +++ /dev/null @@ -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/java/module.py b/modules/openjdk7/module.py similarity index 75% copy from modules/java/module.py copy to modules/openjdk7/module.py index 20891d1..d675fc4 100644 --- a/modules/java/module.py +++ b/modules/openjdk7/module.py @@ -2,14 +2,10 @@ from osv.modules.filemap import FileMap from osv.modules import api import os, os.path -usr_files = FileMap() +api.require('java-cmd') +provides = ['java'] -api.require('fonts') -api.require('ca-certificates') -api.require('libz') -api.require('josvsym') -api.require('httpserver-jolokia-plugin') -api.require('httpserver-jvm-plugin') +usr_files = FileMap() jdkdir = os.path.basename(os.path.expandvars('${jdkbase}')) diff --git a/scripts/module.py b/scripts/module.py index 19c39b5..ec96e89 100755 --- 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 index 3ae3895..9a91fdf 100644 --- a/scripts/osv/modules/api.py +++ b/scripts/osv/modules/api.py @@ -3,6 +3,7 @@ import os 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 index 10aba90..17871d5 100644 --- a/scripts/osv/modules/resolve.py +++ b/scripts/osv/modules/resolve.py @@ -7,6 +7,7 @@ import collections _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='*'): -- 2.7.4 -- 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.
