ctubbsii commented on issue #2555:
URL: https://github.com/apache/accumulo/issues/2555#issuecomment-1062594002


   I don't know about ShellServerIT, but I looked into RowHashIT, and ended up 
filing a bug upstream at 
[SUREFIRE-2035](https://issues.apache.org/jira/browse/SUREFIRE-2035) with an 
explanation of why I think this is happening.
   
   RowHashIT launches a new process using `RowHash.main()` and the current 
test's class path. Here's the stack trace in the launched process that shows it 
is unable to find the classes that are in the main jar artifact for this 
module... something that should definitely be available on the test class path:
   
   ```java
   [main] WARN  org.apache.accumulo.start.classloader.AccumuloClassLoader [] - 
'general.classpaths' is deprecated but was set to 
'/home/christopher/git/apache/accumulo/accumulo/hadoop-mapreduce/target/mini-tests/org.apache.accumulo.hadoop.its.mapreduce.RowHashIT_test/lib/[^.].*[.]jar'
 
   [org.apache.accumulo.hadoop.its.mapreduce.RowHashIT$RowHash] ERROR 
org.apache.accumulo.start.Main [] - Thread 
'org.apache.accumulo.hadoop.its.mapreduce.RowHashIT$RowHash' died.
   java.lang.NoClassDefFoundError: 
org/apache/accumulo/hadoopImpl/mapreduce/lib/MapReduceClientOpts       
     at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]                
                          
     at java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[?:?]         
                          
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) 
~[?:?]                    
     at 
jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) 
~[?:?]            
     at 
jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
 ~[?:?]
     at 
jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
 ~[?:?]        
     at 
jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) 
~[?:?]              
     at 
jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 ~[?:?]           
     at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]            
                          
     at 
org.apache.accumulo.hadoop.its.mapreduce.RowHashIT$RowHash.run(RowHashIT.java:145)
 ~[test-classes/:?]
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) 
~[hadoop-client-api-3.3.0.jar:?]        
     at 
org.apache.accumulo.hadoop.its.mapreduce.RowHashIT$RowHash.main(RowHashIT.java:172)
 ~[test-classes/:?]
     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[?:?]                       
     at 
jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 ~[?:?]  
     at 
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[?:?]
     at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]                 
                          
     at org.apache.accumulo.start.Main.lambda$execMainClass$1(Main.java:163) 
~[accumulo-start-2.1.0-SNAPSHOT.jar:2.1.0-SNAPSHOT]
     at java.lang.Thread.run(Thread.java:829) ~[?:?]                            
                          
   Caused by: java.lang.ClassNotFoundException: 
org.apache.accumulo.hadoopImpl.mapreduce.lib.MapReduceClientOpts
     at 
jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 
~[?:?]              
     at 
jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 ~[?:?]           
     at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]            
                          
     ... 18 more   
   ```
   
   I set up a few strategic 
`System.err.println(System.getProperty("java.class.path"));` lines and was able 
to confirm that `accumulo-hadoop-mapreduce-2.1.0-SNAPSHOT.jar` is on the class 
path for 3.0.0-M4, but not for 3.0.0-M5. I have no idea why, or even how the 
tests still work without the main jar on the class path. I think 
maven-failsafe-plugin is doing something funny with its own class loader to 
filter out the main jar artifact for the module and provide those classes 
through its own class loader... or something crazy like that.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to