Working GraalVM native image build
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 23 Aug 2023 16:39:37 +0000 (18:39 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 23 Aug 2023 16:39:37 +0000 (18:39 +0200)
Makefile
Makefile-graalvm.mk [new file with mode: 0644]
swt/rap/org.argeo.tool.server/META-INF/native-image/jni-config.json [new file with mode: 0644]
swt/rap/org.argeo.tool.server/META-INF/native-image/predefined-classes-config.json [new file with mode: 0644]
swt/rap/org.argeo.tool.server/META-INF/native-image/proxy-config.json [new file with mode: 0644]
swt/rap/org.argeo.tool.server/META-INF/native-image/reflect-config.json [new file with mode: 0644]
swt/rap/org.argeo.tool.server/META-INF/native-image/resource-config.json [new file with mode: 0644]
swt/rap/org.argeo.tool.server/META-INF/native-image/serialization-config.json [new file with mode: 0644]

index 279bf3732fe99416e11f33decb8347c3b79325a0..492b524d1e23fab2aa6966c2c35ac6367e33cae0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -52,25 +52,6 @@ clean:
        $(MAKE) -C jni clean
        $(MAKE) -f Makefile-rcp.mk clean
 
-GRAALVM_HOME = /opt/graalvm-ce
-A2_BUNDLES_CLASSPATH = $(subst $(space),$(pathsep),$(strip $(A2_BUNDLES)))
-
-graalvm-custom:
-       $(GRAALVM_HOME)/bin/java -jar $(ECJ_JAR) @$(SDK_SRC_BASE)/sdk/argeo-build/ecj.args -cp $(A2_CLASSPATH) \
-               graalvm/org.argeo.slc.graalvm/src[-d $(SDK_BUILD_BASE)/$(A2_CATEGORY)/graalvm/bin]
-
-tool-server: osgi graalvm-custom
-       mkdir -p $(A2_OUTPUT)/libexec/$(A2_CATEGORY)
-       cd $(A2_OUTPUT)/libexec/$(A2_CATEGORY) && $(GRAALVM_HOME)/bin/native-image \
-               -cp $(A2_CLASSPATH):$(A2_BUNDLES_CLASSPATH):$(SDK_BUILD_BASE)/$(A2_CATEGORY)/graalvm/bin \
-               --enable-url-protocols=http,https \
-               -H:AdditionalSecurityProviders=sun.security.jgss.SunProvider \
-               --initialize-at-build-time=org.argeo.init.logging.ThinLogging,org.slf4j.LoggerFactory \
-               --no-fallback \
-               -Dargeo.logging.synchronous=true \
-                org.argeo.tool.server.ArgeoServer \
-                argeo
-
 native-deps-debian:
        sudo apt install uuid-dev
 
diff --git a/Makefile-graalvm.mk b/Makefile-graalvm.mk
new file mode 100644 (file)
index 0000000..ff77cad
--- /dev/null
@@ -0,0 +1,51 @@
+include sdk.mk
+
+## THE BUNDLES MUST FIRST HAVE BEEN BUILT
+
+A2_CATEGORY = org.argeo.slc
+
+#GRAALVM_HOME = /opt/graalvm-community-openjdk-17
+GRAALVM_HOME = /opt/mandrel-java17
+
+DEP_CATEGORIES = \
+log/syslogger/org.argeo.tp \
+org.argeo.tp \
+org.argeo.tp.httpd \
+osgi/api/org.argeo.tp.osgi \
+osgi/equinox/org.argeo.tp.eclipse \
+swt/rap/org.argeo.tp.swt \
+org.argeo.cms \
+swt/org.argeo.cms \
+swt/rap/org.argeo.cms \
+swt/rap/org.argeo.slc \
+
+#      $(foreach a2_base, $(A2_BASE), # TODO when ThinLogging is fixed, use deployed jars
+DEP_JARS = $(foreach category, $(DEP_CATEGORIES), \
+       $(foreach a2_base, $(A2_OUTPUT), \
+               $(shell find $(a2_base)/$(category) -name '*.jar') \
+       ) \
+)
+DEP_CLASSPATH = $(subst $(space),$(pathsep),$(strip $(DEP_JARS)))
+
+graalvm-custom:
+       $(GRAALVM_HOME)/bin/java -jar $(ECJ_JAR) @$(SDK_SRC_BASE)/sdk/argeo-build/ecj.args -cp $(A2_CLASSPATH) \
+               graalvm/org.argeo.slc.graalvm/src[-d $(SDK_BUILD_BASE)/$(A2_CATEGORY)/graalvm/bin]
+
+#tool-server: osgi graalvm-custom
+#:$(SDK_BUILD_BASE)/$(A2_CATEGORY)/graalvm/bin
+
+tool-server: osgi 
+       mkdir -p $(A2_OUTPUT)/libexec/$(A2_CATEGORY)
+       cd $(A2_OUTPUT)/libexec/$(A2_CATEGORY) && $(GRAALVM_HOME)/bin/native-image \
+               -cp $(DEP_CLASSPATH) \
+               --enable-url-protocols=http,https \
+               -H:AdditionalSecurityProviders=sun.security.jgss.SunProvider \
+               --initialize-at-build-time=org.argeo.init.logging.ThinLogging,org.argeo.init.logging.ThinLogging$LogEntryPublisher,org.slf4j.LoggerFactory \
+               --no-fallback \
+               -Dargeo.logging.synchronous=true \
+                org.argeo.tool.server.ArgeoServer \
+                argeo
+
+# Use --verbose in order to see whcih configurations are used 
+                
+include  $(SDK_SRC_BASE)/sdk/argeo-build/osgi.mk
\ No newline at end of file
diff --git a/swt/rap/org.argeo.tool.server/META-INF/native-image/jni-config.json b/swt/rap/org.argeo.tool.server/META-INF/native-image/jni-config.json
new file mode 100644 (file)
index 0000000..c8b0813
--- /dev/null
@@ -0,0 +1,10 @@
+[
+{
+  "name":"java.lang.Boolean",
+  "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"sun.management.VMManagementImpl",
+  "fields":[{"name":"compTimeMonitoringSupport"}, {"name":"currentThreadCpuTimeSupport"}, {"name":"objectMonitorUsageSupport"}, {"name":"otherThreadCpuTimeSupport"}, {"name":"remoteDiagnosticCommandsSupport"}, {"name":"synchronizerUsageSupport"}, {"name":"threadAllocatedMemorySupport"}, {"name":"threadContentionMonitoringSupport"}]
+}
+]
diff --git a/swt/rap/org.argeo.tool.server/META-INF/native-image/predefined-classes-config.json b/swt/rap/org.argeo.tool.server/META-INF/native-image/predefined-classes-config.json
new file mode 100644 (file)
index 0000000..0e79b2c
--- /dev/null
@@ -0,0 +1,8 @@
+[
+  {
+    "type":"agent-extracted",
+    "classes":[
+    ]
+  }
+]
+
diff --git a/swt/rap/org.argeo.tool.server/META-INF/native-image/proxy-config.json b/swt/rap/org.argeo.tool.server/META-INF/native-image/proxy-config.json
new file mode 100644 (file)
index 0000000..44991de
--- /dev/null
@@ -0,0 +1,8 @@
+[
+  {
+    "interfaces":["javax.servlet.http.HttpServletRequest"]
+  },
+  {
+    "interfaces":["javax.servlet.http.HttpServletResponse"]
+  }
+]
diff --git a/swt/rap/org.argeo.tool.server/META-INF/native-image/reflect-config.json b/swt/rap/org.argeo.tool.server/META-INF/native-image/reflect-config.json
new file mode 100644 (file)
index 0000000..cb73f1b
--- /dev/null
@@ -0,0 +1,393 @@
+[
+{
+  "name":"[B"
+},
+{
+  "name":"[Ljava.lang.String;"
+},
+{
+  "name":"[Lorg.eclipse.jetty.server.Handler;"
+},
+{
+  "name":"[Lorg.eclipse.jetty.server.handler.ContextHandlerCollection$Branch;"
+},
+{
+  "name":"[Lorg.eclipse.jetty.servlet.FilterHolder;"
+},
+{
+  "name":"[Lorg.eclipse.swt.widgets.TableColumn;"
+},
+{
+  "name":"[Lorg.eclipse.swt.widgets.TreeColumn;"
+},
+{
+  "name":"[Lsun.security.pkcs.SignerInfo;"
+},
+{
+  "name":"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"java.lang.Boolean",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.Byte",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.Class"
+},
+{
+  "name":"java.lang.Double",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.Float",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.Integer",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.Long",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.Object",
+  "methods":[{"name":"equals","parameterTypes":["java.lang.Object"] }, {"name":"hashCode","parameterTypes":[] }, {"name":"toString","parameterTypes":[] }]
+},
+{
+  "name":"java.lang.Short",
+  "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.String"
+},
+{
+  "name":"java.lang.System",
+  "methods":[{"name":"getSecurityManager","parameterTypes":[] }]
+},
+{
+  "name":"java.lang.Thread",
+  "fields":[{"name":"threadLocalRandomProbe"}],
+  "methods":[{"name":"isVirtual","parameterTypes":[] }]
+},
+{
+  "name":"java.lang.management.ManagementFactory",
+  "methods":[{"name":"getRuntimeMXBean","parameterTypes":[] }]
+},
+{
+  "name":"java.lang.management.RuntimeMXBean",
+  "methods":[{"name":"getUptime","parameterTypes":[] }]
+},
+{
+  "name":"java.security.AccessController",
+  "methods":[{"name":"doPrivileged","parameterTypes":["java.security.PrivilegedAction"] }]
+},
+{
+  "name":"java.security.AlgorithmParametersSpi"
+},
+{
+  "name":"java.security.SecureRandomParameters"
+},
+{
+  "name":"java.security.interfaces.DSAPrivateKey"
+},
+{
+  "name":"java.security.interfaces.DSAPublicKey"
+},
+{
+  "name":"java.security.interfaces.RSAPrivateKey"
+},
+{
+  "name":"java.security.interfaces.RSAPublicKey"
+},
+{
+  "name":"java.security.spec.DSAParameterSpec"
+},
+{
+  "name":"java.util.Date"
+},
+{
+  "name":"java.util.concurrent.Executors",
+  "methods":[{"name":"newVirtualThreadPerTaskExecutor","parameterTypes":[] }]
+},
+{
+  "name":"java.util.concurrent.ForkJoinTask",
+  "fields":[{"name":"aux"}, {"name":"status"}]
+},
+{
+  "name":"java.util.concurrent.atomic.AtomicBoolean",
+  "fields":[{"name":"value"}]
+},
+{
+  "name":"java.util.concurrent.atomic.AtomicReference",
+  "fields":[{"name":"value"}]
+},
+{
+  "name":"java.util.concurrent.atomic.Striped64",
+  "fields":[{"name":"base"}, {"name":"cellsBusy"}]
+},
+{
+  "name":"javax.security.auth.login.Configuration$Parameters"
+},
+{
+  "name":"javax.security.auth.x500.X500Principal",
+  "fields":[{"name":"thisX500Name"}],
+  "methods":[{"name":"<init>","parameterTypes":["sun.security.x509.X500Name"] }]
+},
+{
+  "name":"javax.servlet.ServletRequest",
+  "methods":[{"name":"getAsyncContext","parameterTypes":[] }, {"name":"getAttribute","parameterTypes":["java.lang.String"] }, {"name":"getAttributeNames","parameterTypes":[] }, {"name":"getCharacterEncoding","parameterTypes":[] }, {"name":"getContentLength","parameterTypes":[] }, {"name":"getContentLengthLong","parameterTypes":[] }, {"name":"getContentType","parameterTypes":[] }, {"name":"getDispatcherType","parameterTypes":[] }, {"name":"getInputStream","parameterTypes":[] }, {"name":"getLocalAddr","parameterTypes":[] }, {"name":"getLocalName","parameterTypes":[] }, {"name":"getLocalPort","parameterTypes":[] }, {"name":"getLocale","parameterTypes":[] }, {"name":"getLocales","parameterTypes":[] }, {"name":"getParameter","parameterTypes":["java.lang.String"] }, {"name":"getParameterMap","parameterTypes":[] }, {"name":"getParameterNames","parameterTypes":[] }, {"name":"getParameterValues","parameterTypes":["java.lang.String"] }, {"name":"getProtocol","parameterTypes":[] }, {"name":"getReader","parameterTypes":[] }, {"name":"getRealPath","parameterTypes":["java.lang.String"] }, {"name":"getRemoteAddr","parameterTypes":[] }, {"name":"getRemoteHost","parameterTypes":[] }, {"name":"getRemotePort","parameterTypes":[] }, {"name":"getRequestDispatcher","parameterTypes":["java.lang.String"] }, {"name":"getScheme","parameterTypes":[] }, {"name":"getServerName","parameterTypes":[] }, {"name":"getServerPort","parameterTypes":[] }, {"name":"getServletContext","parameterTypes":[] }, {"name":"isAsyncStarted","parameterTypes":[] }, {"name":"isAsyncSupported","parameterTypes":[] }, {"name":"isSecure","parameterTypes":[] }, {"name":"removeAttribute","parameterTypes":["java.lang.String"] }, {"name":"setAttribute","parameterTypes":["java.lang.String","java.lang.Object"] }, {"name":"setCharacterEncoding","parameterTypes":["java.lang.String"] }, {"name":"startAsync","parameterTypes":[] }, {"name":"startAsync","parameterTypes":["javax.servlet.ServletRequest","javax.servlet.ServletResponse"] }]
+},
+{
+  "name":"javax.servlet.ServletResponse"
+},
+{
+  "name":"javax.servlet.http.HttpServletRequest",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.reflect.InvocationHandler"] }, {"name":"authenticate","parameterTypes":["javax.servlet.http.HttpServletResponse"] }, {"name":"changeSessionId","parameterTypes":[] }, {"name":"getAuthType","parameterTypes":[] }, {"name":"getContextPath","parameterTypes":[] }, {"name":"getCookies","parameterTypes":[] }, {"name":"getDateHeader","parameterTypes":["java.lang.String"] }, {"name":"getHeader","parameterTypes":["java.lang.String"] }, {"name":"getHeaderNames","parameterTypes":[] }, {"name":"getHeaders","parameterTypes":["java.lang.String"] }, {"name":"getHttpServletMapping","parameterTypes":[] }, {"name":"getIntHeader","parameterTypes":["java.lang.String"] }, {"name":"getMethod","parameterTypes":[] }, {"name":"getPart","parameterTypes":["java.lang.String"] }, {"name":"getParts","parameterTypes":[] }, {"name":"getPathInfo","parameterTypes":[] }, {"name":"getPathTranslated","parameterTypes":[] }, {"name":"getQueryString","parameterTypes":[] }, {"name":"getRemoteUser","parameterTypes":[] }, {"name":"getRequestURI","parameterTypes":[] }, {"name":"getRequestURL","parameterTypes":[] }, {"name":"getRequestedSessionId","parameterTypes":[] }, {"name":"getServletPath","parameterTypes":[] }, {"name":"getSession","parameterTypes":[] }, {"name":"getSession","parameterTypes":["boolean"] }, {"name":"getTrailerFields","parameterTypes":[] }, {"name":"getUserPrincipal","parameterTypes":[] }, {"name":"isRequestedSessionIdFromCookie","parameterTypes":[] }, {"name":"isRequestedSessionIdFromURL","parameterTypes":[] }, {"name":"isRequestedSessionIdFromUrl","parameterTypes":[] }, {"name":"isRequestedSessionIdValid","parameterTypes":[] }, {"name":"isTrailerFieldsReady","parameterTypes":[] }, {"name":"isUserInRole","parameterTypes":["java.lang.String"] }, {"name":"login","parameterTypes":["java.lang.String","java.lang.String"] }, {"name":"logout","parameterTypes":[] }, {"name":"newPushBuilder","parameterTypes":[] }, {"name":"upgrade","parameterTypes":["java.lang.Class"] }]
+},
+{
+  "name":"javax.servlet.http.HttpServletResponse"
+},
+{
+  "name":"org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.apache.xerces.impl.dv.dtd.XML11DTDDVFactoryImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.apache.xerces.impl.xs.XSMessageFormatter",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.apache.xerces.parsers.XIncludeAwareParserConfiguration",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.argeo.cms.auth.AnonymousLoginModule",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.argeo.cms.auth.DataAdminLoginModule",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.argeo.cms.auth.IdentLoginModule",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.argeo.cms.auth.RemoteSessionLoginModule",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.argeo.cms.auth.UserAdminLoginModule",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.jetty.servlet.DefaultServlet",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.jetty.util.TypeUtil",
+  "methods":[{"name":"getClassLoaderLocation","parameterTypes":["java.lang.Class"] }, {"name":"getCodeSourceLocation","parameterTypes":["java.lang.Class"] }, {"name":"getModuleLocation","parameterTypes":["java.lang.Class"] }, {"name":"getSystemClassLoaderLocation","parameterTypes":["java.lang.Class"] }]
+},
+{
+  "name":"org.eclipse.jetty.websocket.javax.common.JavaxWebSocketSession",
+  "methods":[{"name":"filterReturnType","parameterTypes":["java.lang.Object"] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.client.BrowserNavigationImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.client.ClientInfoImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.client.ExitConfirmationImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.client.StartupParametersImpl",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.client.WebClientMessages",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle",
+  "methods":[{"name":"<init>","parameterTypes":["org.eclipse.rap.rwt.internal.application.ApplicationContextImpl"] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.lifecycle.RequestCounter",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.remote.RemoteObjectRegistry",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.serverpush.ServerPushManager",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.rap.rwt.internal.textsize.ProbeResultStore",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.SWT",
+  "allDeclaredFields":true
+},
+{
+  "name":"org.eclipse.swt.graphics.Color",
+  "methods":[{"name":"<init>","parameterTypes":["int"] }]
+},
+{
+  "name":"org.eclipse.swt.graphics.Font",
+  "methods":[{"name":"<init>","parameterTypes":["org.eclipse.swt.graphics.FontData"] }]
+},
+{
+  "name":"org.eclipse.swt.internal.image.GIFFileFormat",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.image.JPEGFileFormat",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.image.PNGFileFormat",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.image.WinBMPFileFormat",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.image.WinICOFileFormat",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.widgets.IdGenerator",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.widgets.displaykit.DisplayLCA",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.widgets.scrollbarkit.ScrollBarThemeAdapter",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.widgets.shellkit.ShellThemeAdapter",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.widgets.tablekit.TableThemeAdapter",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.eclipse.swt.internal.widgets.treekit.TreeThemeAdapter",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.ConfigFile$Spi",
+  "methods":[{"name":"<init>","parameterTypes":["javax.security.auth.login.Configuration$Parameters"] }]
+},
+{
+  "name":"sun.security.provider.DRBG",
+  "methods":[{"name":"<init>","parameterTypes":["java.security.SecureRandomParameters"] }]
+},
+{
+  "name":"sun.security.provider.DSA$SHA1withDSA",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.DSA$SHA256withDSA",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.DSAKeyFactory",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.DSAParameters",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.NativePRNG",
+  "methods":[{"name":"<init>","parameterTypes":[] }, {"name":"<init>","parameterTypes":["java.security.SecureRandomParameters"] }]
+},
+{
+  "name":"sun.security.provider.SHA",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.SHA2$SHA256",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.provider.X509Factory",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.rsa.RSAKeyFactory$Legacy",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.rsa.RSASignature$SHA256withRSA",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"sun.security.util.ObjectIdentifier"
+},
+{
+  "name":"sun.security.x509.AuthorityInfoAccessExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.AuthorityKeyIdentifierExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.BasicConstraintsExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.CRLDistributionPointsExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.CertificateExtensions"
+},
+{
+  "name":"sun.security.x509.CertificatePoliciesExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.ExtendedKeyUsageExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.KeyUsageExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.NetscapeCertTypeExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.SubjectAlternativeNameExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+  "name":"sun.security.x509.SubjectKeyIdentifierExtension",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+}
+]
diff --git a/swt/rap/org.argeo.tool.server/META-INF/native-image/resource-config.json b/swt/rap/org.argeo.tool.server/META-INF/native-image/resource-config.json
new file mode 100644 (file)
index 0000000..adfcdc0
--- /dev/null
@@ -0,0 +1,496 @@
+{
+  "resources":{
+  "includes":[{
+    "pattern":"\\QMETA-INF/MANIFEST.MF\\E"
+  }, {
+    "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
+  }, {
+    "pattern":"\\QMETA-INF/services/javax.xml.parsers.DocumentBuilderFactory\\E"
+  }, {
+    "pattern":"\\QMETA-INF/services/javax.xml.validation.SchemaFactory\\E"
+  }, {
+    "pattern":"\\QMETA-INF/services/org.eclipse.jetty.http.HttpFieldPreEncoder\\E"
+  }, {
+    "pattern":"\\QMETA-INF/services/org.eclipse.jetty.websocket.core.Extension\\E"
+  }, {
+    "pattern":"\\Qclient.files\\E"
+  }, {
+    "pattern":"\\Qclient.js\\E"
+  }, {
+    "pattern":"\\Qjetty-dir.css\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/DSMLv2.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/SVG.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/XMLSchema.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/cr.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/schema-for-xslt20.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/xlink.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/acr/schemas/xml.xsd\\E"
+  }, {
+    "pattern":"\\Qorg/argeo/cms/internal/runtime/jaas.cfg\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/jetty/http/encoding.properties\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/jetty/http/mime.properties\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/jetty/version/build.properties\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/nebula/widgets/grid/internal/gridkit/Grid.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/nebula/widgets/grid/internal/gridkit/Grid.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/nebula/widgets/grid/internal/gridkit/Grid.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/service/rwt-index.html\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/widgets/dropdownkit/DropDown.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/widgets/dropdownkit/DropDown.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/widgets/dropdownkit/DropDown.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/widgets/fileuploadkit/FileUpload.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/widgets/fileuploadkit/FileUpload.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/rap/rwt/internal/widgets/fileuploadkit/FileUpload.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/browser/browserkit/Browser.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/browser/browserkit/Browser.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/browser/browserkit/Browser.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/ccombokit/CCombo.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/ccombokit/CCombo.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/ccombokit/CCombo.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/clabelkit/CLabel.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/clabelkit/CLabel.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/clabelkit/CLabel.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/ctabfolderkit/CTabFolder.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/ctabfolderkit/CTabFolder.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/ctabfolderkit/CTabFolder.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/custom/scrolledcompositekit/ScrolledComposite.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/buttonkit/Button.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/buttonkit/Button.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/buttonkit/Button.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/combokit/Combo.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/combokit/Combo.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/combokit/Combo.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/compositekit/Composite.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/compositekit/Composite.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/compositekit/Composite.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/controlkit/Control.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/controlkit/Control.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/coolbarkit/CoolBar.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/coolbarkit/CoolBar.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/coolbarkit/CoolBar.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/datetimekit/DateTime.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/datetimekit/DateTime.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/datetimekit/DateTime.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/expandbarkit/ExpandBar.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/expandbarkit/ExpandBar.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/expandbarkit/ExpandBar.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/groupkit/Group.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/groupkit/Group.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/groupkit/Group.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/labelkit/Label.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/labelkit/Label.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/labelkit/Label.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/linkkit/Link.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/linkkit/Link.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/linkkit/Link.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/listkit/List.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/listkit/List.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/listkit/List.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/menukit/Menu.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/menukit/Menu.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/menukit/Menu.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/progressbarkit/ProgressBar.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/progressbarkit/ProgressBar.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/progressbarkit/ProgressBar.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/sashkit/Sash.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/sashkit/Sash.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/sashkit/Sash.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/scalekit/Scale.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/scalekit/Scale.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/scalekit/Scale.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/scrollbarkit/ScrollBar.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/scrollbarkit/ScrollBar.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/scrollbarkit/ScrollBar.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/shellkit/Shell.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/shellkit/Shell.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/shellkit/Shell.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/sliderkit/Slider.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/sliderkit/Slider.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/sliderkit/Slider.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/spinnerkit/Spinner.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/spinnerkit/Spinner.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/spinnerkit/Spinner.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tabfolderkit/TabFolder.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tabfolderkit/TabFolder.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tabfolderkit/TabFolder.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tablekit/Table.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tablekit/Table.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tablekit/Table.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/textkit/Text.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/textkit/Text.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/textkit/Text.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/toolbarkit/ToolBar.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/toolbarkit/ToolBar.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/toolbarkit/ToolBar.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tooltipkit/ToolTip.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tooltipkit/ToolTip.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/tooltipkit/ToolTip.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/treekit/Tree.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/treekit/Tree.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/treekit/Tree.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/widgetkit/Widget.appearances.js\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/widgetkit/Widget.default.css\\E"
+  }, {
+    "pattern":"\\Qorg/eclipse/swt/internal/widgets/widgetkit/Widget.theme.xml\\E"
+  }, {
+    "pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"
+  }, {
+    "pattern":"\\Qresource/static/html/blank.html\\E"
+  }, {
+    "pattern":"\\Qresource/static/image/blank.gif\\E"
+  }, {
+    "pattern":"\\Qresource/theme/default.css\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/chevron-left-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/chevron-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/chevron-right-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/chevron-right.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/tooltip-down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/tooltip-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/tooltip-right.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/arrows/tooltip-up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/arrow-down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/arrow-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/arrow-right.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/arrow-up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/check-grayed-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/check-grayed.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/check-selected-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/check-selected.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/check-unselected-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/check-unselected.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/radio-selected-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/radio-selected.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/radio-unselected-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/button/radio-unselected.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/lastMonth-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/lastMonth.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/lastYear-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/lastYear.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/nextMonth-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/nextMonth.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/nextYear-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/calendar/nextYear.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ccombo/down-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ccombo/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/column/sort-indicator-down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/column/sort-indicator-up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/combo/down-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/combo/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/close.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/close_hover.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/ctabfolder-dropdown-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/ctabfolder-dropdown-left-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/ctabfolder-dropdown-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/ctabfolder-dropdown.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/maximize.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/minimize.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/ctabfolder/restore.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/cursors/alias.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/cursors/copy.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/cursors/move.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/cursors/nodrop.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/cursors/up_arrow.cur\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/datetime/down-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/datetime/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/datetime/up-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/datetime/up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/dialog/error.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/dialog/information.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/dialog/question.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/dialog/warning.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/display/browser_bg.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/display/loading.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/expanditem/expanditem-collapse-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/expanditem/expanditem-collapse.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/expanditem/expanditem-expand-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/expanditem/expanditem-expand.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/menu/arrow-left.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/menu/arrow-right.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/menu/checkbox.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/menu/radiobutton.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/progressbar/progressbar-background.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/sash/sash-handle-horizontal.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/sash/sash-handle-vertical.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scale/h_line.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scale/v_line.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scrollbar/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scrollbar/left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scrollbar/right.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scrollbar/scrollbar-background.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/scrollbar/up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/slider/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/slider/left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/slider/right.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/slider/slider-background.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/slider/up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/spinner/down-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/spinner/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/spinner/up-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/spinner/up.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/text/clear.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/text/find.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/toolbar/down.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tooltip/error.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tooltip/information.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tooltip/warning.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/loading.gif\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-collapsed-hover-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-collapsed-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-collapsed-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-collapsed.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-expanded-hover-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-expanded-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-expanded-left.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/tree/tree-expanded.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-close-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-close.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-max-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-max.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-min-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-min.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-restore-hover.png\\E"
+  }, {
+    "pattern":"\\Qresource/widget/rap/window/shell-restore.png\\E"
+  }, {
+    "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/nfkc.nrm\\E"
+  }]},
+  "bundles":[{
+    "name":"javax.servlet.LocalStrings",
+    "locales":[""]
+  }, {
+    "name":"javax.servlet.http.LocalStrings",
+    "locales":[""]
+  }, {
+    "name":"org.apache.xerces.impl.msg.DOMMessages",
+    "locales":["", "en"]
+  }, {
+    "name":"org.apache.xerces.impl.msg.XMLMessages",
+    "locales":["", "en"]
+  }, {
+    "name":"org.apache.xerces.impl.msg.XMLSerializerMessages",
+    "locales":["", "en"]
+  }, {
+    "name":"org.eclipse.rap.rwt.internal.RWTMessages",
+    "locales":[""]
+  }, {
+    "name":"sun.security.util.Resources",
+    "classNames":["sun.security.util.Resources"]
+  }]
+}
diff --git a/swt/rap/org.argeo.tool.server/META-INF/native-image/serialization-config.json b/swt/rap/org.argeo.tool.server/META-INF/native-image/serialization-config.json
new file mode 100644 (file)
index 0000000..f3d7e06
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "types":[
+  ],
+  "lambdaCapturingTypes":[
+  ],
+  "proxies":[
+  ]
+}