Dear CDKers,

I would like to point a little issue concerning CDK descriptors  
calculation. In my application, the user has the possibility to  
calculate one, several or all CDK descriptors using a checking tree.  
To build this tree, I have to get all descriptors classes, and  
corresponding descriptors name for each class. To do so, I use the  
following snippet:

DescriptorEngine engine = new DescriptorEngine(
                 DescriptorEngine.MOLECULAR);
String[] dClasses = engine.getAvailableDictionaryClasses();

Which should normaly returns all descriptors classes available. The  
problem appears when I deploy my application as an executable jar  
file. Briefly, my application is organised as follow:

myApp.jar
lib/*.jar (including the CDK)
settings/*

As you can see, all external JAR files are not included in the  
application jar file, but are bundled in the same directory under the  
lib/ folder. And with such organisation, the dClasses array is simply  
empty at execution...

Why? I checked the method getAvailableDictionaryClasses(), and finally  
figured that the class list is created by scanning each jar file  
contained in the java.class.path property, as shown in the following  
snippet extracted from the getDescriptorClassNameByPackage(String  
packageName, String [] jarFileNames) method:

if (packageName == null || packageName.equals("")) {
     packageName = "org.openscience.cdk.qsar.descriptors.molecular";
}

String[] jars;
if (jarFileNames == null) {
     String classPath = System.getProperty("java.class.path");
     jars = classPath.split(File.pathSeparator);
}
else {
     jars = jarFileNames;
}

List<String> classlist = new ArrayList<String>();
for (String jar : jars) {
(....)

The problem is actually the java.class.path property. This property  
does not actually contains the full classpath, but only the classpath  
as defined at the application startup. This results, in my case, in a  
single jar file explored on the loop: myApp.jar, which obviously does  
not contains any CDK descriptor class.

So here is my questions:
1. Are you aware of this?
2. In the default case (when we create a descriptor engine using the  
default parameters), why don't you simply load all descriptors classes  
available in the CDK? In such case, there is no need to check any jar  
file as we have already a direct access to all classes..

Cheers :)
Vincent.




------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user

Reply via email to