This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 257082

Summary: java.lang.NoClassDefFoundError: org/netbeans/lib/nbjavac/services/NBClassReader
Product: java Reporter: Mardonis
Component: SourceAssignee: Svata Dedic <sdedic>
Status: RESOLVED WORKSFORME    
Severity: normal CC: mkhramov
Priority: P3    
Version: 8.2   
Hardware: PC   
OS: Windows 7   
Issue Type: DEFECT Exception Reporter:

Description Mardonis 2015-12-09 15:26:12 UTC
Product Version: NetBeans IDE Dev (Build nbms-and-javadoc-3792-on-20151130)
Java: 1.8.0_45; Java HotSpot(TM) Client VM 25.45-b02
Runtime: Java(TM) SE Runtime Environment 1.8.0_45-b14
System: Windows 7 version 6.1 running on x86; Cp1252; en_US (nb)
User directory: C:\Users\cornholio\AppData\Roaming\NetBeans\8.1rc
Cache directory: C:\Users\cornholio\AppData\Local\NetBeans\Cache\8.1rc

Annotation: An error occurred during parsing of 'C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\native-lib-support\src\net\java\nativelibsupport\NativeLibSupport.java'. Please report a bug against java/source and attach dump file 'C:\Users\cornholio\AppData\Roaming\NetBeans\8.1rc\var\log\NativeLibSupport_1.dump'.
Annotation: An error occurred during parsing of 'C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\native-lib-support\src\net\java\nativelibsupport\NativeLibSupport.java'. Please report a bug against java/source and attach dump file 'C:\Users\cornholio\AppData\Roaming\NetBeans\8.1rc\var\log\NativeLibSupport_1.dump'.
An error occurred during parsing of 'C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\native-lib-support\src\net\java\nativelibsupport\NativeLibSupport.java'. Please report a bug against java/source and attach dump file 'C:\Users\cornholio\AppData\Roaming\NetBeans\8.1rc\var\log\NativeLibSupport_1.dump'.
An error occurred during parsing of 'C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\native-lib-support\src\net\java\nativelibsupport\NativeLibSupport.java'. Please report a bug against java/source and attach dump file 'C:\Users\cornholio\AppData\Roaming\NetBeans\8.1rc\var\log\NativeLibSupport_1.dump'.
Caused: java.lang.NoClassDefFoundError: org/netbeans/lib/nbjavac/services/NBClassReader
	at org.netbeans.modules.java.source.parsing.JavacParser.createJavacTask(JavacParser.java:824)
	at org.netbeans.modules.java.source.parsing.JavacParser.createJavacTask(JavacParser.java:709)
	at org.netbeans.modules.java.source.parsing.CompilationInfoImpl.getJavacTask(CompilationInfoImpl.java:396)
	at org.netbeans.modules.java.source.parsing.JavacParser.moveToPhase(JavacParser.java:593)
	at org.netbeans.modules.java.source.parsing.CompilationInfoImpl.toPhase(CompilationInfoImpl.java:383)
	at org.netbeans.api.java.source.CompilationController.toPhase(CompilationController.java:109)
	at org.netbeans.modules.java.JavaNode$IconTask$SourceIcon$1.run(JavaNode.java:468)
	at org.netbeans.modules.java.JavaNode$IconTask$SourceIcon$1.run(JavaNode.java:465)
	at org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:486)
	at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:609)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:153)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:137)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:204)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:201)
	at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:176)
	at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:360)
	at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:141)
	at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:88)
	at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:201)
	at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:104)
	at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:436)
	at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:407)
	at org.netbeans.modules.java.JavaNode$IconTask$SourceIcon.computeIcon(JavaNode.java:465)
	at org.netbeans.modules.java.JavaNode$IconTask.run(JavaNode.java:427)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)


package net.java.nativelibsupport;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.List;
import java.util.Properties;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import net.java.nativelibsupport.natives_config.Library;
import net.java.nativelibsupport.natives_config.Library.Os;
import net.java.nativelibsupport.natives_config.Library.Os.Cpu;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.JarFileSystem;

/**
 * Utility class for native library deployment.
 * @author Michael Bien
 */
public class NativeLibSupport {
    
    private static WeakReference<JAXBContext> reference;

    private NativeLibSupport() {
    }
    
    /**
     * Deployes, re-deployes or does nothing dependent on the currently deployed native libraries.
     * @param jarName the name of the library.jar
     * @param configFile InputStream which reads the xml config file
     * @param distFolder The distribution folder containing the library.jar and all native libraries in sub folders
     * @throws DeploymentException Thrown when libraries were not successfully deployed.
     */
    public static void deploy(String jarName, InputStream configFile, File distributionFolder) throws LibDeploymentException {
        deploy(jarName, configFile, distributionFolder, null);
    }
    
    /**
     * Deployes, re-deployes or does nothing dependent on the currently deployed native libraries.
     * @param jarName the name of the library.jar
     * @param configFile InputStream which reads the xml config file
     * @param distFolder The distribution folder containing the library.jar and all native libraries in sub folders
     * @param archive The zip archive in which the native libraries are stored
     * @throws DeploymentException Thrown when libraries were not successfully deployed.
     */
    public static void deploy(String jarName, InputStream configFile, File distributionFolder, String archive) throws LibDeploymentException {
        
        assert jarName!=null;
        assert configFile!=null;
        assert distributionFolder!=null;

        try{
            JarFileSystem jarSystem = new JarFileSystem();
            
            // read jogl version from manifest and compare with deployed version
            jarSystem.setJarFile(new File(distributionFolder+File.separator+jarName));
            String jarVersion = jarSystem.getManifest().getMainAttributes().getValue("Implementation-Version");
            
            if(jarVersion == null)
                throw new NullPointerException(jarSystem.getJarFile()+" has no 'Implementation-Version' property in manifest file");
            
            String root = distributionFolder.getCanonicalPath();
            root = root.substring(0, root.lastIndexOf(File.separator));
            
            String libFolderPath = root + File.separator + "modules" + File.separator + "lib";
            
            // read property file with deployed libraries version entries
            File propertyFile = new File(libFolderPath + File.separator + "deployed-natives.properties");
            
            Properties properties = new Properties();
            if(propertyFile.exists()) {
                properties.load(new FileInputStream(propertyFile));
            }else{
                propertyFile.getParentFile().mkdirs();
                propertyFile.createNewFile();
            }
            
            String deployedLibVersion = properties.getProperty(jarName, null);
            
            //  check if we've already deployed
            if(deployedLibVersion == null || !jarVersion.equals(deployedLibVersion)) {
                
                // load native libraries configuration file
                Object obj = null;
                try {
                    // jaxb context loading is expensive load it only once
                    JAXBContext jc = getJAXBContext();

                    Unmarshaller unmarshaller = jc.createUnmarshaller();
                    obj = unmarshaller.unmarshal(configFile);
                    
                } catch (JAXBException ex) {
//                    Logger.getLogger(NativeLibSupport.class.getName()).log(Level.SEVERE, null, ex);
                    throw new RuntimeException("error reading deployment file", ex);
                }

                if(obj instanceof Library == false) {
                    throw new IllegalArgumentException("wrong root element in config file. 'Library' expected but got "+obj);
                }

                Library lib = (Library)obj;

                String osName = System.getProperty("os.name");
                String cpuName = System.getProperty("os.arch");

                // assamble path to platform dependent library folder
                StringBuilder path = new StringBuilder();
                path.append(distributionFolder.getName());
                path.append(File.separatorChar);

                FileObject libSource = null;

                // find library storage
                if(archive != null && archive.endsWith(".zip")) {
                    path.append(archive);

                    JarFileSystem jar = new JarFileSystem();
                    jar.setJarFile(new File(root+File.separator+path.toString()));

                    path.delete(0, path.length());
                    path.append(lib.getName());
                    if(!lib.isFlat())
                        path.append(File.separatorChar);
                    assambleLibPath(lib, osName, cpuName, path);

                    path.append(".jar");

                    libSource = jar.findResource(path.toString());

                }else{
                    path.append(lib.getName());
                    if(!lib.isFlat())
                        path.append(File.separatorChar);
                    assambleLibPath(lib, osName, cpuName, path);

                    libSource = FileUtil.toFileObject(
                            new File(root+File.separator+path.toString()));
                }
                
                if(libSource != null) {
                    
                    FileObject libTargetFolder = FileUtil.createFolder(new File(libFolderPath));

                    if(libSource.isFolder()) {
                        copyFolderEntries(libSource, libTargetFolder);
                    }else{
                        extractArchive(libSource, libTargetFolder);
                    }
                    
                    // update deployed version property
                    properties.put(jarName, jarVersion);
                    properties.store(new FileOutputStream(propertyFile), "deployed native libraries (remove entry and restart to force re-deployment)");

                    Logger.getLogger(NativeLibSupport.class.getName()).info(
                        "deployed "+jarName+" version: "+jarVersion );
                }else{
                    String os = System.getProperty("os.name");
                    String arch = System.getProperty("os.arch");
                    throw new LibDeploymentException(
                            String.format("The %1$s native libraries are either not available"+
                            " for this system (OS: %2$s CPU: %3$s) or an error accrued while deploying", lib.getName(), os, arch));
                }
            }else{
                Logger.getLogger(NativeLibSupport.class.getName()).info(
                        jarName+" version "+jarVersion +" is up to date");
            }
            
        }catch(Exception ex) {
            throw new LibDeploymentException("can not deploy "+ jarName +" natives", ex);
        }
        
    }
    
    /**
     * overwrites files
     */
    private static final void copyFolderEntries(FileObject src, FileObject targetFolder) throws IOException {
        FileObject[] entries = src.getChildren();
        for (int i = 0; i < entries.length; i++) {
            FileObject entry = entries[i];
            
            // delete old files (overwrite)
            FileObject old = targetFolder.getFileObject(entry.getNameExt());
            if(old != null) {
                Logger.getLogger(NativeLibSupport.class.getName()).info(
                    "remove old file: "+old.getPath() );
                old.delete();
            }
            
            // copy into target folder
            Logger.getLogger(NativeLibSupport.class.getName()).info(
                    "copy "+entry.getPath() +" to "+targetFolder.getPath() );
            FileUtil.copyFile(entry, targetFolder, entry.getName());
        }
    }

    private static void extractArchive(FileObject libSource, FileObject libTargetFolder) throws IOException {
        FileUtil.extractJar(libTargetFolder, libSource.getInputStream());
    }
    
    private final static void assambleLibPath(Library lib, String osName, String cpuName, StringBuilder nativesFolderPath) {
        
        List<Os> oses = lib.getOs();

        for (Os os : oses) {
            
            Matcher osMatcher = Pattern.compile(os.getRegex()).matcher(osName);
            
            if(osMatcher.find()) {

                nativesFolderPath.append(os.getFolder());
                if(!lib.isFlat())
                    nativesFolderPath.append(File.separatorChar);

                List<Cpu> cpus = os.getCpu();

                for (Cpu cpu : cpus) {
                    
                    Matcher cpuMatcher = Pattern.compile(cpu.getRegex()).matcher(cpuName);
                    
                    if(cpuMatcher.find()) {
                        nativesFolderPath.append(cpu.getFolder());
                        break;
                    }
                }
                break;
            }
        }
    }
    
    private static final synchronized JAXBContext getJAXBContext() throws JAXBException {
        
        JAXBContext jc;
        
        if(reference == null) {
            jc = createJAXBContext();
            reference = new WeakReference<JAXBContext>(jc);
        }else{
            jc = reference.get();
            if(jc == null) {
                jc = createJAXBContext();
                reference = new WeakReference<JAXBContext>(jc);
            }
        }
//        System.out.println(jc);
        return jc;
    }
    
    private final static JAXBContext createJAXBContext() throws JAXBException {
        return JAXBContext.newInstance(
                         "net.java.nativelibsupport.natives_config",
                         NativeLibSupport.class.getClassLoader()    );
    }
    
    

}

----- Classpath: ---------------------------------------------
bootPath: C:\Program Files\Java\jdk18\jre\lib\resources.jar;C:\Program Files\Java\jdk18\jre\lib\rt.jar;C:\Program Files\Java\jdk18\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk18\jre\lib\jsse.jar;C:\Program Files\Java\jdk18\jre\lib\jce.jar;C:\Program Files\Java\jdk18\jre\lib\charsets.jar;C:\Program Files\Java\jdk18\jre\lib\jfr.jar;C:\Program Files\Java\jdk18\jre\classes;C:\Program Files\Java\jdk18\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk18\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk18\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk18\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk18\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk18\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk18\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk18\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk18\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk18\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk18\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk18\jre\lib\ext\zipfs.jar
classPath: C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\build\cluster\modules\javax-xml-bind.jar;C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\JAXB\release\modules\ext\jsr173_1.0_api.jar;C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\JAXB\release\modules\ext\jaxb-impl.jar;C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\JAXB\release\modules\ext\jaxb-api.jar;C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\JAXB\release\modules\ext\activation.jar;C:\Users\cornholio\Desktop\Sandbox\netbeans-8.1rc-201510012201-php1\netbeans\platform\core\org-openide-filesystems.jar
sourcePath: C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\native-lib-support\src;C:\Users\cornholio\Desktop\Sandbox\Theory\Netbeans Plugins\netbeans-opengl-pack-master\netbeans-opengl-pack-master\native-lib-support\build\classes-generated
----- Original exception ---------------------------------------------
java.lang.NoClassDefFoundError: org/netbeans/lib/nbjavac/services/NBClassReader
	at org.netbeans.modules.java.source.parsing.JavacParser.createJavacTask(JavacParser.java:824)
	at org.netbeans.modules.java.source.parsing.JavacParser.createJavacTask(JavacParser.java:709)
	at org.netbeans.modules.java.source.parsing.CompilationInfoImpl.getJavacTask(CompilationInfoImpl.java:396)
	at org.netbeans.modules.java.source.parsing.JavacParser.moveToPhase(JavacParser.java:593)
	at org.netbeans.modules.java.source.parsing.CompilationInfoImpl.toPhase(CompilationInfoImpl.java:383)
	at org.netbeans.api.java.source.CompilationController.toPhase(CompilationController.java:109)
	at org.netbeans.modules.java.JavaNode$IconTask$SourceIcon$1.run(JavaNode.java:468)
	at org.netbeans.modules.java.JavaNode$IconTask$SourceIcon$1.run(JavaNode.java:465)
	at org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:486)
	at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:609)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:153)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:137)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:204)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:201)
	at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:176)
	at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:360)
	at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:141)
	at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:88)
	at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:201)
	at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:104)
	at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:436)
	at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:407)
	at org.netbeans.modules.java.JavaNode$IconTask$SourceIcon.computeIcon(JavaNode.java:465)
	at org.netbeans.modules.java.JavaNode$IconTask.run(JavaNode.java:427)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)
Comment 1 Svata Dedic 2016-04-25 14:52:14 UTC
*** Bug 257482 has been marked as a duplicate of this bug. ***
Comment 2 Exceptions Reporter 2016-05-16 12:30:33 UTC
This bug already has 10 duplicates 
see http://statistics.netbeans.org/exceptions/detail.do?id=178494
Comment 3 Svata Dedic 2016-07-18 14:01:17 UTC
works for me in the 8.2 dev build. All the reports have lib.nbjavac and javacimpl around 11-12/2015, it seems that something broken was published on autoupdate for the daily builds.
No report for javac > 1/2016.