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

Details

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

    Description

      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.








       

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: