From 6d4ff51b9c417ca1b4b67c4f6aadea9ab41f3692 Mon Sep 17 00:00:00 2001 From: Zvika Idelsberg Date: Wed, 25 Mar 2015 03:40:28 -0600 Subject: [PATCH 01/10] fix bug 1361953(bugzilla)/HQ-4820(jira) - changing the way MultiProcess cpu usage(%) is calculated --- .../src/org/hyperic/sigar/MultiProcCpu.java | 54 +++++-------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java b/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java index 7865e4030..ce4435518 100644 --- a/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java +++ b/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java @@ -28,64 +28,33 @@ public class MultiProcCpu extends ProcCpu { private long pid; private int nproc = 0; - private static Map ptable = new HashMap(); - static synchronized MultiProcCpu get(Sigar sigar, String query) - throws SigarException { - - MultiProcCpu cpu; - - cpu = (MultiProcCpu)ptable.get(query); - - if (cpu == null) { - cpu = new MultiProcCpu(); - cpu.pid = query.hashCode(); //for equals() - ptable.put(query, cpu); - } - - long timeNow = System.currentTimeMillis(); - double diff = timeNow - cpu.lastTime; - if (diff == 0) { - return cpu; //we were just called within < 1 second ago. - } - cpu.lastTime = timeNow; + static synchronized MultiProcCpu get(Sigar sigar, String query) + throws SigarException { - long otime = cpu.total; + MultiProcCpu cpu = new MultiProcCpu(); + cpu.pid = query.hashCode(); //for equals() cpu.total = 0; cpu.user = 0; cpu.sys = 0; - cpu.nproc = 0; + cpu.percent = 0.0D; long[] pids = ProcessFinder.find(sigar, query); cpu.nproc = pids.length; for (int i=0; i= 1.0) { - cpu.percent = 0.99; } return cpu; @@ -94,6 +63,7 @@ static synchronized MultiProcCpu get(Sigar sigar, String query) /** * @return Processes CPU usage percentage. */ + @Override public double getPercent() { return this.percent; } @@ -108,10 +78,12 @@ public int getProcesses() { /** * @return Pid of the process. */ + @Override public int hashCode() { return (int)this.pid; } + @Override public boolean equals(Object cpu) { if (!(cpu instanceof MultiProcCpu)) { return false; From 706f352e56bc3040788fea306ae8b744331db878 Mon Sep 17 00:00:00 2001 From: Zvika Idelsberg Date: Wed, 25 Mar 2015 04:25:43 -0600 Subject: [PATCH 02/10] removing Override annotations --- bindings/java/src/org/hyperic/sigar/MultiProcCpu.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java b/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java index ce4435518..42fb25e39 100644 --- a/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java +++ b/bindings/java/src/org/hyperic/sigar/MultiProcCpu.java @@ -16,9 +16,6 @@ package org.hyperic.sigar; -import java.util.HashMap; -import java.util.Map; - import org.hyperic.sigar.ptql.ProcessFinder; /** @@ -63,7 +60,6 @@ static synchronized MultiProcCpu get(Sigar sigar, String query) /** * @return Processes CPU usage percentage. */ - @Override public double getPercent() { return this.percent; } @@ -78,12 +74,10 @@ public int getProcesses() { /** * @return Pid of the process. */ - @Override public int hashCode() { return (int)this.pid; } - @Override public boolean equals(Object cpu) { if (!(cpu instanceof MultiProcCpu)) { return false; From 0928a780f4c6a6b2075ec9c555c40e24c0ae08b2 Mon Sep 17 00:00:00 2001 From: tgoldman Date: Wed, 1 Jul 2015 12:00:41 +0300 Subject: [PATCH 03/10] Fix [SIGAR-252] - Add support for discovering Windows 2012 R2 --- src/os/win32/win32_sigar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/win32/win32_sigar.c b/src/os/win32/win32_sigar.c index cbe94a4e5..f53b5e9a3 100755 --- a/src/os/win32/win32_sigar.c +++ b/src/os/win32/win32_sigar.c @@ -3777,7 +3777,7 @@ int sigar_os_sys_info_get(sigar_t *sigar, vendor_version = "2008"; code_name = "Longhorn Server"; } - else if (version.dwMinorVersion == 2) { + else if (version.dwMinorVersion == 2 || version.dwMinorVersion == 3) { vendor_name = "Windows 2012"; vendor_version = "2012"; code_name = "Windows Server 8"; From 341e288e98bb6931992d7dda68df0db17e28427f Mon Sep 17 00:00:00 2001 From: Boaz Date: Thu, 16 Jul 2015 16:11:16 +0300 Subject: [PATCH 04/10] With Tomer. Optimizing the performance counter queries on win32. There is now a cache for 1 second to all performance counter data. --- include/sigar_private.h | 2 + src/os/win32/sigar_os.h | 11 +++- src/os/win32/win32_sigar.c | 100 +++++++++++++++++++++---------------- 3 files changed, 69 insertions(+), 44 deletions(-) diff --git a/include/sigar_private.h b/include/sigar_private.h index 484f83064..11e62cd87 100644 --- a/include/sigar_private.h +++ b/include/sigar_private.h @@ -153,6 +153,8 @@ #define SIGAR_LAST_PROC_EXPIRE 2 +#define SIGAR_BUFFER_EXPIRE 1000 + #define SIGAR_FS_MAX 10 #define SIGAR_CPU_INFO_MAX 4 diff --git a/src/os/win32/sigar_os.h b/src/os/win32/sigar_os.h index e98de45da..f1b01e587 100755 --- a/src/os/win32/sigar_os.h +++ b/src/os/win32/sigar_os.h @@ -570,14 +570,21 @@ typedef struct { sigar_dll_func_t end; } sigar_mpr_t; +typedef struct +{ + char *buffer; + DWORD size; + time_t create_time; +} buffer_t; + struct sigar_t { SIGAR_T_BASE; char *machine; int using_wide; long pagesize; HKEY handle; - char *perfbuf; - DWORD perfbuf_size; + buffer_t* performanceBuffer; + buffer_t* processesBuffer; sigar_wtsapi_t wtsapi; sigar_iphlpapi_t iphlpapi; sigar_advapi_t advapi; diff --git a/src/os/win32/win32_sigar.c b/src/os/win32/win32_sigar.c index f53b5e9a3..291268716 100755 --- a/src/os/win32/win32_sigar.c +++ b/src/os/win32/win32_sigar.c @@ -30,7 +30,7 @@ #define USING_WIDE_S(s) (s)->using_wide #define USING_WIDE() USING_WIDE_S(sigar) -#define PERFBUF_SIZE 8192 +#define BUFFER_SIZE 8192 #define PERF_TITLE_PROC 230 #define PERF_TITLE_SYS_KEY "2" @@ -111,11 +111,11 @@ typedef enum { (USING_WIDE() ? \ RegQueryValueExW(sigar->handle, \ wcounter_key, NULL, &type, \ - sigar->perfbuf, \ + sigar->performanceBuffer->buffer, \ &bytes) : \ RegQueryValueExA(sigar->handle, \ counter_key, NULL, &type, \ - sigar->perfbuf, \ + sigar->performanceBuffer->buffer, \ &bytes)) #define PERF_VAL(ix) \ @@ -145,24 +145,25 @@ sigar_uint64_t sigar_FileTimeToTime(FILETIME *ft) return time; } -static DWORD perfbuf_init(sigar_t *sigar) +static DWORD buffer_init(buffer_t *buffer) { - if (!sigar->perfbuf) { - sigar->perfbuf = malloc(PERFBUF_SIZE); - sigar->perfbuf_size = PERFBUF_SIZE; + if (!buffer->buffer) { + buffer->buffer = malloc(BUFFER_SIZE); + buffer->size = BUFFER_SIZE; + buffer->create_time = 0; } - return sigar->perfbuf_size; + return BUFFER_SIZE; } -static DWORD perfbuf_grow(sigar_t *sigar) +static DWORD buffer_grow(buffer_t *buffer) { - sigar->perfbuf_size += PERFBUF_SIZE; + buffer->size += BUFFER_SIZE; - sigar->perfbuf = - realloc(sigar->perfbuf, sigar->perfbuf_size); + buffer->buffer = + realloc(buffer->buffer, buffer->size); - return sigar->perfbuf_size; + return buffer->size; } static char *get_counter_name(char *key) @@ -199,11 +200,11 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, SIGAR_A2W(counter_key, wcounter_key, sizeof(wcounter_key)); } - bytes = perfbuf_init(sigar); - + bytes = buffer_init(sigar->performanceBuffer); + while ((retval = MyRegQueryValue()) != ERROR_SUCCESS) { if (retval == ERROR_MORE_DATA) { - bytes = perfbuf_grow(sigar); + bytes = buffer_grow(sigar->performanceBuffer); } else { *err = retval; @@ -211,7 +212,7 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, } } - block = (PERF_DATA_BLOCK *)sigar->perfbuf; + block = (PERF_DATA_BLOCK *)sigar->performanceBuffer->buffer; if (block->NumObjectTypes == 0) { counter_key = get_counter_name(counter_key); sigar_strerror_printf(sigar, "No %s counters defined (disabled?)", @@ -219,6 +220,8 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, *err = -1; return NULL; } + + sigar->performanceBuffer->create_time = time(NULL); object = PdhFirstObject(block); /* @@ -542,8 +545,12 @@ int sigar_os_open(sigar_t **sigar_ptr) sigar->machine = ""; /* local machine */ sigar->using_wide = 0; /*XXX*/ - sigar->perfbuf = NULL; - sigar->perfbuf_size = 0; + sigar->performanceBuffer = (buffer_t*) malloc(sizeof(buffer_t)); + sigar->processesBuffer = (buffer_t*) malloc(sizeof(buffer_t)); + sigar->performanceBuffer->buffer = NULL; + sigar->processesBuffer->buffer = NULL; + buffer_init(sigar->performanceBuffer); + buffer_init(sigar->processesBuffer); version.dwOSVersionInfoSize = sizeof(version); GetVersionEx(&version); @@ -607,6 +614,14 @@ void dllmod_init_ntdll(sigar_t *sigar) DLLMOD_INIT(ntdll, FALSE); } +void buffer_free(buffer_t* buffer) +{ + if (buffer) { + free(buffer->buffer); + free(buffer); + } +} + int sigar_os_close(sigar_t *sigar) { int retval; @@ -620,9 +635,8 @@ int sigar_os_close(sigar_t *sigar) DLLMOD_FREE(kernel); DLLMOD_FREE(mpr); - if (sigar->perfbuf) { - free(sigar->perfbuf); - } + buffer_free(sigar->processesBuffer); + buffer_free(sigar->performanceBuffer); retval = RegCloseKey(sigar->handle); @@ -1145,25 +1159,23 @@ int sigar_os_proc_list_get(sigar_t *sigar, if (sigar_EnumProcesses) { DWORD retval, *pids; DWORD size = 0, i; - - do { - /* re-use the perfbuf */ - if (size == 0) { - size = perfbuf_init(sigar); - } - else { - size = perfbuf_grow(sigar); - } - - if (!sigar_EnumProcesses((DWORD *)sigar->perfbuf, - sigar->perfbuf_size, - &retval)) - { - return GetLastError(); - } - } while (retval == sigar->perfbuf_size); //unlikely - - pids = (DWORD *)sigar->perfbuf; + + do { + if (size == 0) { + size = buffer_init(sigar->processesBuffer); + } + else { + size = buffer_grow(sigar); + } + + if (!sigar_EnumProcesses((DWORD *)sigar->processesBuffer->buffer, + sigar->processesBuffer->size, + &retval)) { + return GetLastError(); + } + } while (retval == sigar->processesBuffer->size); //unlikely + + pids = (DWORD *)sigar->processesBuffer->buffer; size = retval / sizeof(DWORD); @@ -1408,7 +1420,11 @@ static int get_proc_info(sigar_t *sigar, sigar_pid_t pid) memset(&perf_offsets, 0, sizeof(perf_offsets)); - object = get_process_object(sigar, &err); + if ((timenow - sigar->performanceBuffer->create_time) < SIGAR_BUFFER_EXPIRE) { + object = PdhFirstObject(((PERF_DATA_BLOCK *)sigar->performanceBuffer->buffer)); + } else { + object = get_process_object(sigar, &err); + } if (object == NULL) { return err; From 48ba690dd46e4c16c303cfa05b4b09fef2f5ae31 Mon Sep 17 00:00:00 2001 From: BoazHarel Date: Mon, 20 Jul 2015 11:44:50 +0300 Subject: [PATCH 05/10] With Tomer. Optimizing the performance counter queries on win32. splitted performance counters cache to caches per counter_key. --- src/os/win32/sigar_os.h | 2 +- src/os/win32/win32_sigar.c | 95 ++++++++++++++++++++++++++++++-------- 2 files changed, 77 insertions(+), 20 deletions(-) diff --git a/src/os/win32/sigar_os.h b/src/os/win32/sigar_os.h index f1b01e587..14992367f 100755 --- a/src/os/win32/sigar_os.h +++ b/src/os/win32/sigar_os.h @@ -583,7 +583,7 @@ struct sigar_t { int using_wide; long pagesize; HKEY handle; - buffer_t* performanceBuffer; + buffer_t** performanceBuffers; buffer_t* processesBuffer; sigar_wtsapi_t wtsapi; sigar_iphlpapi_t iphlpapi; diff --git a/src/os/win32/win32_sigar.c b/src/os/win32/win32_sigar.c index 291268716..6c170cb82 100755 --- a/src/os/win32/win32_sigar.c +++ b/src/os/win32/win32_sigar.c @@ -39,6 +39,15 @@ #define PERF_TITLE_CPU_KEY "238" #define PERF_TITLE_DISK_KEY "236" +typedef enum +{ + PERF_COUNTER_SYS + , PERF_COUNTER_MEM + , PERF_COUNTER_PROC + , PERF_COUNTER_CPU + , PERF_COUNTER_DISK +} perf_counter_keys_t; + #define PERF_TITLE_CPU_USER 142 #define PERF_TITLE_CPU_IDLE 1746 #define PERF_TITLE_CPU_SYS 144 @@ -111,11 +120,11 @@ typedef enum { (USING_WIDE() ? \ RegQueryValueExW(sigar->handle, \ wcounter_key, NULL, &type, \ - sigar->performanceBuffer->buffer, \ + performanceBuffer->buffer, \ &bytes) : \ RegQueryValueExA(sigar->handle, \ counter_key, NULL, &type, \ - sigar->performanceBuffer->buffer, \ + performanceBuffer->buffer, \ &bytes)) #define PERF_VAL(ix) \ @@ -185,6 +194,33 @@ static char *get_counter_name(char *key) } } +static int get_performance_buffer_by_counter_key(sigar_t* sigar, char* counterKey, buffer_t** performanceBuffer) +{ + int i; + + if (strEQ(counterKey, PERF_TITLE_SYS_KEY)) { + i = PERF_COUNTER_SYS; + } + else if (strEQ(counterKey, PERF_TITLE_MEM_KEY)) { + i = PERF_COUNTER_MEM; + } + else if (strEQ(counterKey, PERF_TITLE_PROC_KEY)) { + i = PERF_COUNTER_PROC; + } + else if (strEQ(counterKey, PERF_TITLE_CPU_KEY)) { + i = PERF_COUNTER_CPU; + } + else if (strEQ(counterKey, PERF_TITLE_DISK_KEY)) { + i = PERF_COUNTER_DISK; + } else { + return -1; + } + + *performanceBuffer = sigar->performanceBuffers[i]; + return SIGAR_OK; + +} + static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, char *counter_key, DWORD inst, DWORD *err) @@ -193,18 +229,28 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, WCHAR wcounter_key[MAX_PATH+1]; PERF_DATA_BLOCK *block; PERF_OBJECT_TYPE *object; + time_t timenow = time(NULL); + buffer_t* performanceBuffer; + *err = get_performance_buffer_by_counter_key(sigar, counter_key, &performanceBuffer); + + if (*err != SIGAR_OK) { + return NULL; + } - *err = SIGAR_OK; - - if (USING_WIDE()) { + if ((timenow - performanceBuffer->create_time) < SIGAR_BUFFER_EXPIRE) { + return PdhFirstObject(((PERF_DATA_BLOCK *)performanceBuffer->buffer)); + } + + + if (USING_WIDE()) { SIGAR_A2W(counter_key, wcounter_key, sizeof(wcounter_key)); } - bytes = buffer_init(sigar->performanceBuffer); + bytes = buffer_init(performanceBuffer); while ((retval = MyRegQueryValue()) != ERROR_SUCCESS) { if (retval == ERROR_MORE_DATA) { - bytes = buffer_grow(sigar->performanceBuffer); + bytes = buffer_grow(performanceBuffer); } else { *err = retval; @@ -212,7 +258,8 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, } } - block = (PERF_DATA_BLOCK *)sigar->performanceBuffer->buffer; + block = (PERF_DATA_BLOCK *)performanceBuffer->buffer; + if (block->NumObjectTypes == 0) { counter_key = get_counter_name(counter_key); sigar_strerror_printf(sigar, "No %s counters defined (disabled?)", @@ -221,7 +268,9 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar, return NULL; } - sigar->performanceBuffer->create_time = time(NULL); + performanceBuffer->buffer = block; + performanceBuffer->create_time = time(NULL); + object = PdhFirstObject(block); /* @@ -545,13 +594,18 @@ int sigar_os_open(sigar_t **sigar_ptr) sigar->machine = ""; /* local machine */ sigar->using_wide = 0; /*XXX*/ - sigar->performanceBuffer = (buffer_t*) malloc(sizeof(buffer_t)); sigar->processesBuffer = (buffer_t*) malloc(sizeof(buffer_t)); - sigar->performanceBuffer->buffer = NULL; sigar->processesBuffer->buffer = NULL; - buffer_init(sigar->performanceBuffer); buffer_init(sigar->processesBuffer); + sigar->performanceBuffers = (buffer_t**)malloc(sizeof(buffer_t *) * 5); + for (i = 0; i < 5; i++) + { + sigar->performanceBuffers[i] = (buffer_t*)malloc(sizeof(buffer_t)); + sigar->performanceBuffers[i]->buffer = NULL; + buffer_init(sigar->performanceBuffers[i]); + } + version.dwOSVersionInfoSize = sizeof(version); GetVersionEx(&version); @@ -624,7 +678,7 @@ void buffer_free(buffer_t* buffer) int sigar_os_close(sigar_t *sigar) { - int retval; + int retval, i; DLLMOD_FREE(wtsapi); DLLMOD_FREE(iphlpapi); @@ -636,7 +690,14 @@ int sigar_os_close(sigar_t *sigar) DLLMOD_FREE(mpr); buffer_free(sigar->processesBuffer); - buffer_free(sigar->performanceBuffer); + + if (sigar->performanceBuffers) { + for (i = 0; i < 5; i++) { + buffer_free(sigar->performanceBuffers[i]); + } + + free(sigar->performanceBuffers); + } retval = RegCloseKey(sigar->handle); @@ -1420,11 +1481,7 @@ static int get_proc_info(sigar_t *sigar, sigar_pid_t pid) memset(&perf_offsets, 0, sizeof(perf_offsets)); - if ((timenow - sigar->performanceBuffer->create_time) < SIGAR_BUFFER_EXPIRE) { - object = PdhFirstObject(((PERF_DATA_BLOCK *)sigar->performanceBuffer->buffer)); - } else { - object = get_process_object(sigar, &err); - } + object = get_process_object(sigar, &err); if (object == NULL) { return err; From 7a6aefc7fb315fc92445edcb902a787a6f0ddbd9 Mon Sep 17 00:00:00 2001 From: tgoldman Date: Mon, 17 Aug 2015 09:36:50 +0300 Subject: [PATCH 06/10] Fix [SIGAR-253]- Remove a space from else if condition --- src/os/win32/win32_sigar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/win32/win32_sigar.c b/src/os/win32/win32_sigar.c index 6c170cb82..b79ee2076 100755 --- a/src/os/win32/win32_sigar.c +++ b/src/os/win32/win32_sigar.c @@ -3850,7 +3850,7 @@ int sigar_os_sys_info_get(sigar_t *sigar, vendor_version = "2008"; code_name = "Longhorn Server"; } - else if (version.dwMinorVersion == 2 || version.dwMinorVersion == 3) { + else if (version.dwMinorVersion == 2 || version.dwMinorVersion == 3) { vendor_name = "Windows 2012"; vendor_version = "2012"; code_name = "Windows Server 8"; From ee1237fcf20e37c7461f40fe057112ccb4a82059 Mon Sep 17 00:00:00 2001 From: Angelo Polo Date: Wed, 15 Apr 2020 14:23:56 +0200 Subject: [PATCH 07/10] For Java 11: minimum source and target set to 1.6 --- bindings/java/build.xml | 2 +- bindings/java/hyperic_jni/jni-build.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bindings/java/build.xml b/bindings/java/build.xml index 1c886d612..7836c3bad 100644 --- a/bindings/java/build.xml +++ b/bindings/java/build.xml @@ -96,7 +96,7 @@ diff --git a/bindings/java/hyperic_jni/jni-build.xml b/bindings/java/hyperic_jni/jni-build.xml index c8616aee5..7af562b1e 100644 --- a/bindings/java/hyperic_jni/jni-build.xml +++ b/bindings/java/hyperic_jni/jni-build.xml @@ -161,7 +161,7 @@ From 7ac4fe692551c3502fafe1a724273f2e5ab7eaa4 Mon Sep 17 00:00:00 2001 From: Angelo Polo Date: Tue, 21 Apr 2020 13:33:54 +0200 Subject: [PATCH 08/10] Pack separate test jar dependent on 'junit.jar' variable --- bindings/java/build.xml | 46 +++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/bindings/java/build.xml b/bindings/java/build.xml index 7836c3bad..721e26a51 100644 --- a/bindings/java/build.xml +++ b/bindings/java/build.xml @@ -35,6 +35,7 @@ + &jni-build; @@ -53,10 +54,10 @@ - + - - + + @@ -92,9 +93,6 @@ - - - - + + + + + + + + + + + @@ -257,7 +269,8 @@ + basedir="${build}/classes" + excludes="**/test/**"> + + + + + + @@ -298,7 +319,6 @@ jvm="${java.home}/bin/java" jar="${sigar-bin}/lib/${sigar.jar}"> - @@ -307,7 +327,11 @@ haltonfailure="no" showoutput="true"> - + + + + + @@ -322,7 +346,7 @@ - + Date: Thu, 23 Apr 2020 09:12:13 +0200 Subject: [PATCH 09/10] Runs on Java 11 (don't hijack the classloader) --- .../src/org/hyperic/sigar/cmd/Runner.java | 153 +----------------- 1 file changed, 3 insertions(+), 150 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/cmd/Runner.java b/bindings/java/src/org/hyperic/sigar/cmd/Runner.java index 249dc087e..aa81f6723 100644 --- a/bindings/java/src/org/hyperic/sigar/cmd/Runner.java +++ b/bindings/java/src/org/hyperic/sigar/cmd/Runner.java @@ -33,124 +33,11 @@ import org.hyperic.sigar.Sigar; import org.hyperic.sigar.SigarLoader; +/** + * Some commands require junit and log4j on the classpath. + */ public class Runner { - private static HashMap wantedJars = new HashMap(); - private static final String JAR_EXT = ".jar"; - - static { - wantedJars.put("junit", Boolean.FALSE); - wantedJars.put("log4j", Boolean.FALSE); - } - - private static void printMissingJars() { - for (Iterator it = wantedJars.entrySet().iterator(); - it.hasNext();) - { - Map.Entry entry = (Map.Entry)it.next(); - String jar = (String)entry.getKey(); - if (wantedJars.get(jar) == Boolean.FALSE) { - System.out.println("Unable to locate: " + jar + JAR_EXT); - } - } - } - - private static boolean missingJars() { - for (Iterator it = wantedJars.entrySet().iterator(); - it.hasNext();) - { - Map.Entry entry = (Map.Entry)it.next(); - String jar = (String)entry.getKey(); - if (wantedJars.get(jar) == Boolean.FALSE) { - return true; - } - } - - return false; - } - - public static URL[] getLibJars(String dir) throws Exception { - File[] jars = new File(dir).listFiles(new FileFilter() { - public boolean accept(File file) { - String name = file.getName(); - int jarIx = name.indexOf(JAR_EXT); - if (jarIx == -1) { - return false; - } - int ix = name.indexOf('-'); - if (ix != -1) { - name = name.substring(0, ix); //versioned .jar - } - else { - name = name.substring(0, jarIx); - } - - if (wantedJars.get(name) != null) { - wantedJars.put(name, Boolean.TRUE); - return true; - } - else { - return false; - } - } - }); - - if (jars == null) { - return new URL[0]; - } - - URL[] urls = new URL[jars.length]; - - for (int i=0; i Date: Thu, 23 Apr 2020 16:09:53 +0200 Subject: [PATCH 10/10] Split test/non-test compilation --- bindings/java/build.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bindings/java/build.xml b/bindings/java/build.xml index 721e26a51..ed91dd8c0 100644 --- a/bindings/java/build.xml +++ b/bindings/java/build.xml @@ -116,7 +116,7 @@ - + @@ -287,7 +287,7 @@ - +