Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8166846

jdeps fails to generate module info if there is any class in unnamed package

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 9
    • 9
    • tools
    • b140

      This can be reproduce with steps below

      1. just create a simple jar with following classes:
      class A in unnamed package
      class B in package p

      2. package into a jar file, such as test.jar

      3. try with
      JDK_HOME/bin/jdeps --gen-module-info ./ test.jar
      Exception in thread "main" java.lang.module.FindException: Unable to derive module descriptor for: test.jar
      at java.lang.module.ModulePath.readJar(java.base@9-ea/ModulePath.java:552)
      at java.lang.module.ModulePath.readModule(java.base@9-ea/ModulePath.java:274)
      at java.lang.module.ModulePath.scan(java.base@9-ea/ModulePath.java:193)
      at java.lang.module.ModulePath.scanNextEntry(java.base@9-ea/ModulePath.java:145)
      at java.lang.module.ModulePath.findAll(java.base@9-ea/ModulePath.java:121)
      at com.sun.tools.jdeps.ModuleInfoBuilder.<init>(jdk.jdeps@9-ea/ModuleInfoBuilder.java:80)
      at com.sun.tools.jdeps.JdepsTask.genModuleInfo(jdk.jdeps@9-ea/JdepsTask.java:653)
      at com.sun.tools.jdeps.JdepsTask.run(jdk.jdeps@9-ea/JdepsTask.java:506)
      at com.sun.tools.jdeps.JdepsTask.run(jdk.jdeps@9-ea/JdepsTask.java:470)
      at com.sun.tools.jdeps.Main.main(jdk.jdeps@9-ea/Main.java:48)
      Caused by: java.lang.IllegalArgumentException: Empty package name
      at jdk.internal.module.Checks.requireJavaIdentifier(java.base@9-ea/Checks.java:70)
      at jdk.internal.module.Checks.requirePackageName(java.base@9-ea/Checks.java:93)
      at java.lang.module.ModuleDescriptor$Exports.<init>(java.base@9-ea/ModuleDescriptor.java:269)
      at java.lang.module.ModuleDescriptor$Exports.<init>(java.base@9-ea/ModuleDescriptor.java:266)
      at java.lang.module.ModuleDescriptor$Exports.<init>(java.base@9-ea/ModuleDescriptor.java:239)
      at java.lang.module.ModuleDescriptor$Builder.exports(java.base@9-ea/ModuleDescriptor.java:1347)
      at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(java.base@9-ea/ForEachOps.java:184)
      at java.util.stream.DistinctOps$1$2.accept(java.base@9-ea/DistinctOps.java:175)
      at java.util.stream.ReferencePipeline$3$1.accept(java.base@9-ea/ReferencePipeline.java:195)
      at java.util.HashMap$KeySpliterator.forEachRemaining(java.base@9-ea/HashMap.java:1600)
      at java.util.stream.AbstractPipeline.copyInto(java.base@9-ea/AbstractPipeline.java:484)
      at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base@9-ea/AbstractPipeline.java:474)
      at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(java.base@9-ea/ForEachOps.java:151)
      at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(java.base@9-ea/ForEachOps.java:174)
      at java.util.stream.AbstractPipeline.evaluate(java.base@9-ea/AbstractPipeline.java:234)
      at java.util.stream.ReferencePipeline.forEach(java.base@9-ea/ReferencePipeline.java:430)
      at java.lang.module.ModulePath.deriveModuleDescriptor(java.base@9-ea/ModulePath.java:436)
      at java.lang.module.ModulePath.readJar(java.base@9-ea/ModulePath.java:548)
      ... 9 more


      Apparently, jdeps restricts all classes should be in named package, but I really doubt if such restriction is necessary. Users may write test or module private classes in unnamed module. This should be ignored during generating module info rather than interrupting the procedure.








       

            mchung Mandy Chung (Inactive)
            xiaofeya Xiaofeng Yang
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: