Hi Florian, On Tue, Apr 14, 2020 at 08:49:44PM +0200, Florian Weimer wrote: > > Meh. Does R have exceptions? It would be nice to translate the > underlying exception from > > if (clnam) > cls = findClass(env, clnam, oClassLoader); > else > cls = objectClass(env,o); > if (!cls) > error_return("RcallMethod: cannot determine object class"); > > into an R exception with a nice backtrace, then we might see *why* the > class fails to load (like the missing superinterface before).
I have no idea about this. > We can try to actually load the class using the classpath you used and > some Java tools: > > # jshell --class-path > /usr/share/java/cdk-interfaces.jar:/e/java/cdk-silent.jar > | Welcome to JShell -- Version 11.0.7-ea > | For an introduction type: /help intro > > jshell> org.openscience.cdk.silent.SilentChemObjectBuilder.class.newInstance() > | Exception java.lang.NoClassDefFoundError: > org/openscience/cdk/DynamicFactory$CreationModifier > | at Class.getDeclaredConstructors0 (Native Method) > | at Class.privateGetDeclaredConstructors (Class.java:3137) > | at Class.getConstructor0 (Class.java:3342) > | at Class.newInstance (Class.java:556) > | at (#1:1) > | Caused by: java.lang.ClassNotFoundException: > org.openscience.cdk.DynamicFactory$CreationModifier > | at BuiltinClassLoader.loadClass (BuiltinClassLoader.java:581) > | at ClassLoaders$AppClassLoader.loadClass (ClassLoaders.java:178) > | at ClassLoader.loadClass (ClassLoader.java:522) > | ... > > That error goes away if I add /usr/share/java/cdk-core.jar to the > classpath. Hopefully that gets past this point. (The jshell command > will still fail, but now because JDK can load the class and sees that > the constructor has private access and cannot be called. Hopefully > that's not relevant in the real scenario.) So far your hints were helpful. It turned out that finally the CLASSPATH does not need to set only in d/rules for building the package but way more importantly inside r-cran-rcdklibs package. It was shipping a binary JAR cdk-2.3.jar. Since this had to be replaced by the Debian packaged libcdk-java I symlinked now to all JARs that are shipped with libcdk-java into the install dir from rcdklibs: https://salsa.debian.org/r-pkg-team/r-cran-rcdklibs/-/blob/master/debian/rules You see I need also vecmath.jar in addition - and more ... The CLASSPATH is created when loading rcdklibs in https://salsa.debian.org/r-pkg-team/r-cran-rcdklibs/-/blob/master/R/rcdklibs.R line 10. It simply attaches each JAR file that is found in $(debRdir)/$(cranNameOrig)/cont/ (see rules file) So far I'm now able to build the r-cran-rcdk package. However, in the autopkgtest more classes are needed. The output is: ... 1 Test Suite : rcdk rcdk Unit Tests - 31 test functions, 31 errors, 0 failures ERROR in test.charges: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.get.hcount: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.is.aromatic: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.depictiongenerator: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.fp: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.fp.substructures.binary: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.fp.substructures.count: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.frag1: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.frag2: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.frag3: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.aromaticity.match: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.match1: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.match2: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.match3: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.match4: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.mcs1: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.mcs2: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.mcs3: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.get.properties: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.set.props: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.atom.count: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.desc.calc: Error in .jcall("org/guha/rcdk/descriptors/DescriptorUtilities", "[Ljava/lang/String;", : java.util.ServiceConfigurationError: org.openscience.cdk.qsar.IMolecularDescriptor: Provider org.openscience.cdk.qsar.descriptors.molecular.KierHallSmartsDescriptor could not be instantiated ERROR in test.desc.cats: Error in .jcall("org/guha/rcdk/descriptors/DescriptorUtilities", "[Ljava/lang/String;", : java.util.ServiceConfigurationError: org.openscience.cdk.qsar.IMolecularDescriptor: Provider org.openscience.cdk.qsar.descriptors.molecular.KierHallSmartsDescriptor could not be instantiated ERROR in test.desc.names: Error in .jcall("org/guha/rcdk/descriptors/DescriptorUtilities", "[Ljava/lang/String;", : java.util.ServiceConfigurationError: org.openscience.cdk.qsar.IMolecularDescriptor: Provider org.openscience.cdk.qsar.descriptors.molecular.KierHallSmartsDescriptor could not be instantiated ERROR in test.exact.natural.mass: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.formula: Error in load.molecules(formula_file) : java.lang.NoClassDefFoundError: com/google/common/io/CharStreams ERROR in test.get.largest: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.is.connected: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.is.neutral: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.get.smiles: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ERROR in test.get.smiles2: Error in .jnew("org/openscience/cdk/smiles/SmilesParser", get.chem.object.builder()) : java.lang.NoClassDefFoundError: com/google/common/collect/Multimap ... and I'm now wondering what other JARs I need to symlink (if I do not really want to symlink every *.jar inside /usr/share/java which would probably work but sounds a bit like overkill. Hmmm, thinking I could also symlink the whole dir to /usr/share/java and tried: $ git diff diff --git a/debian/rules b/debian/rules index 045412f..6a6e650 100755 --- a/debian/rules +++ b/debian/rules @@ -9,9 +9,10 @@ JARS=vecmath.jar override_dh_link: dh_link - for jar in `dpkg -L libcdk-java | grep /usr/share/java/ | grep -v [0-9]\.[0-9]\.jar` ; do \ - dh_link $${jar} $(debRdir)/$(cranNameOrig)/cont/`basename $${jar}` ; \ - done - for jar in $(JARS) ; do \ - dh_link /usr/share/java/$${jar} $(debRdir)/$(cranNameOrig)/cont/$${jar} ; \ - done + dh_link /usr/share/java $(debRdir)/$(cranNameOrig)/cont +# for jar in `dpkg -L libcdk-java | grep /usr/share/java/ | grep -v [0-9]\.[0-9]\.jar` ; do \ +# dh_link $${jar} $(debRdir)/$(cranNameOrig)/cont/`basename $${jar}` ; \ +# done +# for jar in $(JARS) ; do \ +# dh_link /usr/share/java/$${jar} $(debRdir)/$(cranNameOrig)/cont/$${jar} ; \ +# done but this did not changed the error above unfortunately. :-( Any further hints? Kind regards Andreas. -- http://fam-tille.de