有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Intellij Idea:使用IBM JDK 7构建项目的问题

我有一个需要与IBM JDK 7一起使用的项目。我在windows 7上使用Intellij Idea 15.0.2。我的项目是多模块maven项目,使用了一些groovy脚本,还使用gradle使用maven org.fortasoft:gradle-maven-plugin将POM展平。现在,当我尝试构建我的应用程序(Build -> Rebuild Project)时,我在Messages窗口中遇到了一个单行错误

Error:java.lang.NullPointerException

当我检查构建时。日志(C:\Users\.IntelliJIdea15\system\log\build log\build.log),我看到以下异常。只要我将project SDK更改为Oracle JDK 7,一切都正常。知道这里出了什么问题吗

[Update 1:]我还试图使缓存无效,并重新启动了这个想法,只是为了排除缓存在这里的恶意行为

2015-12-22 14:16:23,343 [   4126]   INFO - .incremental.IncProjectBuilder - java.lang.NullPointerException
org.jetbrains.jps.incremental.ProjectBuildException: java.lang.NullPointerException
     at org.jetbrains.jps.incremental.groovy.GroovyBuilder.build(GroovyBuilder.java:142)
     at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1230)
     at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:904)
     at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:976)
     at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:870)
     at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:695)
     at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:386)
     at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:193)
     at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:137)
     at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:294)
     at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:125)
     at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler$1.run(BuildMain.java:232)
     at org.jetbrains.jps.service.impl.SharedThreadPoolImpl$1.run(SharedThreadPoolImpl.java:42)
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:482)
     at java.util.concurrent.FutureTask.run(FutureTask.java:273)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
     at java.lang.Thread.run(Thread.java:795)
Caused by: java.lang.NullPointerException
     at java.lang.ClassLoader.loadClass(ClassLoader.java:731)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:707)
     at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.createCompilationClassLoader(InProcessGroovyc.java:179)
     at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovyc(InProcessGroovyc.java:76)
     at org.jetbrains.jps.incremental.groovy.GroovyBuilder.runGroovycOrContinuation(GroovyBuilder.java:201)
     at org.jetbrains.jps.incremental.groovy.GroovyBuilder.build(GroovyBuilder.java:117)
     ... 17 more

共 (2) 个答案

  1. # 1 楼答案

    Any idea on whats going wrong here?

    如果我们查看InProcessGroovyc.createCompilationClassLoader,我们可以看到代码

     private JointCompilationClassLoader createCompilationClassLoader(Collection<String> compilationClassPath) throws Exception {
        ClassLoader parent = obtainParentLoader(compilationClassPath);
    
        ClassLoader groovyClassLoader = null;
        try {
          ClassLoader auxiliary = parent != null ? parent : buildCompilationClassLoader(compilationClassPath, null).get();
          Class<?> gcl = auxiliary.loadClass("groovy.lang.GroovyClassLoader"); // 179 line, we throw NullPointer Exception
    

    在类加载器中。负荷等级

    public Class<?> loadClass(String name) throws ClassNotFoundException {
        return loadClass(name, false); // 131 line
    }
    
    
    protected Class<?> loadClass(String name, boolean resolve)
            throws ClassNotFoundException
        {
            synchronized (getClassLoadingLock(name)) {
                // First, check if the class has already been loaded
                Class<?> c = findLoadedClass(name); // return null if class not found 
    

    所以IBM JDK 7找不到groovy.lang.GroovyClassLoader的主要问题是,请检查groovy安装是否正确,IBM JDK可以看到groovy库(groovy已下载,GROOVY_HOME环境变量设置正确,GROOVY_HOME/bin已添加到PATH环境变量)

  2. # 2 楼答案

    看来这实际上是v15的一个bug。0.2. 解决方法是在Settings | Build, Execution, Deployment | Compiler | User-local build process VM options下添加-Didea.parallel.class.loader=false

    enter image description here

    更多细节here。v15应该提供修复程序。0.3. 直到那时,这种变通方法才奏效(至少对我来说是这样)