Lombok: Tambahkan dukungan kompiler jdk9

Dibuat pada 6 Des 2015  ·  98Komentar  ·  Sumber: projectlombok/lombok

Status (Diperbarui 2018-01-09)

  • Mengingat jumlah parameter --add-opens yang tepat, kita dapat mengkompilasi kode yang berisi anotasi lombok pada build 9.0.1+11
  • 1.16.20 mendukung jdk9, gradle 4.2.1, maven 3.5.0 (contoh pom)
  • module-info.java tidak ada untuk lombok, sejauh ini lombok hanya dapat digunakan di classpath, Tidak pasti apakah Anda dapat mengkompilasi modul.
  • @javax.annotation.Generated tidak akan lagi dibuat secara default, lihat di bawah
  • Kami bahkan tidak melihat dukungan ecj/Eclipse. Mungkin saja berhasil, mungkin tidak
  • Kami mungkin akan mengalami masalah dengan kelas yang dikompilasi dengan jdk9 yang memiliki entri kumpulan konten baru. Kita perlu memperbaiki ClassFileMetaData

Informasi terbaru (Berdasarkan build 9.0.1+11)

module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @6b927fb

Lombok menggunakan API yang tidak terpapar. Kita perlu menginstruksikan jvm bahwa tidak apa-apa.

javac \
-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
-cp lombok.jar \
Test.java

Menurut surat ini oleh Mark Reinhold kita dapat mengganti semua klausa --add-opens dengan --permit-illegal-access di versi jdk9 yang akan datang. Namun, itu akan menghasilkan peringatan pada file stderr. Menggunakan --add-opens tidak.

package javax.annotation is not visible

Sejak 1.16.20, pesan ini hanya akan muncul jika Anda secara eksplisit mengaktifkannya di lombok.config menggunakan lombok.addJavaxGeneratedAnnotation = true .

Jika ditentukan, lombok menambahkan @javax.annotation.Generated("lombok") ke semua metode yang dihasilkan.

Sejak sistem modul baru, anotasi ini tidak lagi tersedia secara standar.

Ada dua cara untuk memperbaikinya:

  1. Hapus baris berikut dari file lombok.config proyek Anda:

    lombok.addJavaxGeneratedAnnotation = true
    
  2. Tambahkan --add-modules=java.xml.ws.annotation ke parameter baris perintah javac Anda.

_ Deskripsi ini akan diperbarui jika informasi lebih lanjut tersedia. _

Komentar yang paling membantu

1.16.20 baru saja diunggah ke situs web kami dan akan segera tersedia di maven central.

Semua 98 komentar

Saya baru saja membuat rilis tepi . Ini menangani masalah pid .

Saya hanya menguji @Data , dan berharap fitur yang bergantung pada resolusi, seperti val , @Delegate dan @ExtensionMethod akan menghasilkan beberapa masalah lagi.

Membangun dengan Bazel berfungsi sekarang. Terima kasih!

bisakah kita mendapatkan ini dirilis?

Bersulang

Adakah kemungkinan bahwa ini akan segera dirilis ke maven?
Saya mengalami masalah rawan kesalahan.

Perbaikan adalah bagian dari versi 1.16.8, yang telah dirilis 03-07-2016. Apakah Anda sudah menggunakan versi itu?

Biarkan saya mencobanya lagi.

Sepertinya berhasil!
Terima kasih!

Hai,

karena JDK 9 semakin dekat - apakah ada pembaruan terkait masalah ini?

Bersulang,
Christoph

Masih terlalu banyak gerakan pada spesifikasi modul untuk memiliki estimasi yang berarti.

Saya yakin itu akan berhasil pada akhirnya. Saya takut bahwa perlu ada flag compiler untuk membuka ke lombok. Seberapa buruk itu, kita belum tahu.

Saya mencoba mengalihkan proyek saya ke jdk9 di heroku dan mendapatkan kesalahan yang sama.

Rampdown JDK 9 telah dimulai, jadi saya pikir aman untuk mulai mengerjakan ini.
http://openjdk.java.net/projects/jdk9/

@javadev Apa yang Anda maksud dengan "kesalahan yang sama"?

Agak sulit untuk membedakan mana yang sudah diperbaiki dan mana yang belum.

Saya secara khusus prihatin tentang module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @6b927fb . Saya melihat ini dalam build menggunakan 1.16.16. Jadi saya menganggap itu belum diperbaiki? Apakah ada snapshot yang bisa saya gunakan untuk saat ini?

Maaf, salah paham ... itu --add-opens diperlukan untuk pemanggilan javac untuk mengkompilasi kode yang menggunakan lombok.

Bendera JDK9 baru --permit-illegal-access , yang diperkenalkan beberapa minggu yang lalu, jauh lebih mudah digunakan daripada rangkaian bendera --add-opens yang Anda butuhkan. Itu disebutkan dalam pembaruan masalah.

dengan lombok 1.16.16 dan errorprone 2.0.19 (plexus-compiler-javac-errorprone 2.8.1), semuanya tampak berfungsi tetapi menampilkan jejak tumpukan yang tampak bermasalah ini selama kompilasi:

java.lang.NullPointerException
    at lombok.javac.apt.LombokFileObjects.createEmpty(LombokFileObjects.java:123)
    at lombok.javac.apt.InterceptingJavaFileManager.getJavaFileForOutput(InterceptingJavaFileManager.java:47)
    at com.sun.tools.javac.processing.JavacFiler.createSourceOrClassFile(JavacFiler.java:414)
    at com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:388)
    at lombok.javac.apt.LombokProcessor.forceNewRound(LombokProcessor.java:333)
    at lombok.javac.apt.LombokProcessor.process(LombokProcessor.java:322)
    at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:114)
    at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:164)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.process(AnnotationProcessor.java:74)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:826)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:742)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2000(JavacProcessingEnvironment.java:100)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1046)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1153)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1120)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:814)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:97)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:128)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:87)
    at com.google.errorprone.BaseErrorProneJavaCompiler$1.call(BaseErrorProneJavaCompiler.java:99)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
    at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:119)
    at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:66)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:886)
    at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:153)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
warning: Can't force a new processing round. Lombok won't work.

Apakah itu kesalahan yang diketahui/diharapkan/aman?

Tidak. Saya baru saja mendorong 539b2a767f604dd561a7da09ae26114e8cfc065a untuk menambahkan beberapa informasi debug tambahan. Bisakah Anda mengunduh rilis tepi dan kompilasi dengan itu? Anda mungkin perlu melakukan sihir ahli untuk menggunakan toples ini, seperti memasukkannya ke dalam cache dengan nama yang salah.

Itu tidak akan memperbaiki masalah Anda, tetapi akan membantu kami memperbaikinya, jadi beri tahu kami jika Anda sekarang mendapatkan IllegalArgumentException, dan apa pesannya,

 warning: lombok.javac.apt.LombokProcessor could not be initialized. Lombok will not run during this compilation: java.lang.IllegalArgumentException: com.google.errorprone.MaskedClassLoader$MaskedFileManager extends com.sun.tools.javac.file.JavacFileManager
    at lombok.javac.apt.LombokFileObjects.getCompiler(LombokFileObjects.java:127)
    at lombok.javac.apt.InterceptingJavaFileManager.<init>(InterceptingJavaFileManager.java:40)
    at lombok.javac.apt.LombokProcessor.placePostCompileAndDontMakeForceRoundDummiesHook(LombokProcessor.java:164)
    at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:85)
    at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
    at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:539)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:636)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:727)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2000(JavacProcessingEnvironment.java:100)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1046)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1153)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1120)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:814)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:97)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:128)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:87)
    at com.google.errorprone.BaseErrorProneJavaCompiler$1.call(BaseErrorProneJavaCompiler.java:99)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
    at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:119)
    at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:66)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:886)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

Terima kasih. Kami baru saja membuat rilis edge baru, yang mungkin dapat memperbaiki masalah Anda. Bisakah Anda mencobanya lagi?

Mendapatkan pengecualian berbeda dengan rilis edge terbaru:

java.lang.IllegalArgumentException: URI has an authority component
    at sun.nio.fs.UnixUriUtils.fromUri(UnixUriUtils.java:53)
    at sun.nio.fs.UnixFileSystemProvider.getPath(UnixFileSystemProvider.java:98)
    at java.nio.file.Paths.get(Paths.java:138)
    at lombok.javac.apt.LombokFileObjects$Java9Compiler.wrap(LombokFileObjects.java:151)
    at lombok.javac.apt.LombokFileObjects.createEmpty(LombokFileObjects.java:132)
    at lombok.javac.apt.InterceptingJavaFileManager.getJavaFileForOutput(InterceptingJavaFileManager.java:47)
    at com.sun.tools.javac.processing.JavacFiler.createSourceOrClassFile(JavacFiler.java:414)
    at com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:388)
    at lombok.javac.apt.LombokProcessor.forceNewRound(LombokProcessor.java:333)
    at lombok.javac.apt.LombokProcessor.process(LombokProcessor.java:322)
    at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:114)
    at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:164)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.process(AnnotationProcessor.java:74)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:826)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:742)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2000(JavacProcessingEnvironment.java:100)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1046)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1153)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1120)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:814)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:97)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:128)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:87)
    at com.google.errorprone.BaseErrorProneJavaCompiler$1.call(BaseErrorProneJavaCompiler.java:99)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
    at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:119)
    at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:66)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:886)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
warning: Can't force a new processing round. Lombok won't work.

Saya mengalami masalah yang sama dengan @jbarnettwomply. Menantikan untuk solusi Anda, thx! :)

@rspilker Tes Bazel gagal meskipun build Baazel berfungsi dengan baik.

Masalah ini adalah penghalang bagi saya. Netbeans menggunakan JDK9 secara internal, membuat lombok sama sekali tidak dapat digunakan di bawah IDE ini. Tidak ada solusi.

Dengan rilis JDK9 yang akan segera hadir, perkirakan lebih banyak IDE yang terpengaruh saat mereka mulai menambahkan dukungan mereka sendiri.

Harap jadikan masalah ini sebagai prioritas utama.

@cowwoc Saya cukup yakin di sinilah sebagian besar waktu pengelola dihabiskan selama lebih dari setengah tahun. Ini jelas merupakan masalah prioritas paling utama.

Mengenai java.lang.IllegalArgumentException: URI memiliki komponen otoritas

Saya sudah mencoba mereproduksinya dari mesin saya (Windows) menggunakan errorprone (com.google.errorprone:error_prone_core:2.0.19) dan maven (org.codehaus.plexus:plexus-compiler-javac-errorprone:2.8) dan tidak bisa' t, tapi mungkin saya salah mengonfigurasinya. Jadi saya telah menambahkan informasi debug baru ke sumbernya. Seharusnya tidak memperbaiki masalah.

Kami baru saja membuat rilis tepi baru. @jbarnettwomply atau @CiaoWood , bisa tolong coba lagi dan laporkan pesan kesalahannya?

Anda mungkin perlu melakukan sihir ahli untuk menggunakan toples ini, seperti memasukkannya ke dalam cache dengan nama yang salah.

java.lang.IllegalArgumentException: Problems in URI 'file://lombok/dummy/ForceNewRound0.java' (lombok/dummy/ForceNewRound0.java)
    at lombok.javac.apt.LombokFileObjects$Java9Compiler.wrap(LombokFileObjects.java:156)
    at lombok.javac.apt.LombokFileObjects.createEmpty(LombokFileObjects.java:133)
    at lombok.javac.apt.InterceptingJavaFileManager.getJavaFileForOutput(InterceptingJavaFileManager.java:47)
    at com.sun.tools.javac.processing.JavacFiler.createSourceOrClassFile(JavacFiler.java:414)
    at com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:388)
    at lombok.javac.apt.LombokProcessor.forceNewRound(LombokProcessor.java:333)
    at lombok.javac.apt.LombokProcessor.process(LombokProcessor.java:322)
    at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:114)
    at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:164)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.process(AnnotationProcessor.java:74)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:826)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:742)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2000(JavacProcessingEnvironment.java:100)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1046)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1153)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1120)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:814)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:97)
    at com.sun.tools.javac.api.JavacTaskImpl$1.call(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:128)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:93)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:87)
    at com.google.errorprone.BaseErrorProneJavaCompiler$1.call(BaseErrorProneJavaCompiler.java:99)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
    at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
    at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:119)
    at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:66)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:886)
    at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:153)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.IllegalArgumentException: URI has an authority component
    at sun.nio.fs.UnixUriUtils.fromUri(UnixUriUtils.java:53)
    at sun.nio.fs.UnixFileSystemProvider.getPath(UnixFileSystemProvider.java:98)
    at java.nio.file.Paths.get(Paths.java:138)
    at lombok.javac.apt.LombokFileObjects$Java9Compiler.wrap(LombokFileObjects.java:154)
    ... 56 more
warning: Can't force a new processing round. Lombok won't work.

Berdasarkan pesan kesalahan, saya pikir kami telah menemukan masalahnya.

Rilis tepi baru mungkin berisi perbaikan. Umpan balik diterima.

Tidak melihat pesan kesalahan apa pun dengan rilis edge terbaru. Terima kasih!

@rspilker Saya masih mendapatkan pesan kesalahan saat menggunakan rilis tepi terbaru

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project <...>: Fatal error compiling: java.lang.ExceptionInInitializerError: Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module <strong i="7">@5bdda90b</strong> -> [Help 1]

Saya menginstalnya menggunakan perintah berikut:

mvn install:install-file -Dfile=lombok-edge.jar -DgroupId=org.lombokproject -DartifactId=lombok -Dversion=1.16.17 -Dpackaging=jar

Versi jdk saya saat ini adalah jdk-9+173 dan info pakar saya adalah

Apache Maven 3.5.0 (NON-CANONICAL_2017-04-10T13:56:20+03:00_root; 2017-04-10T10:56:20Z)
Maven home: /opt/maven
Java version: 9-ea, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-9-jdk
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.11.3-1-arch", arch: "amd64", family: "unix"

Saya dapat mengonfirmasi apa yang dikatakan @jamiemagee , jdk-9+174 w/ edge baru saja diunduh + Maven 3.3.9

@JamieMagee , @md-5 apakah Anda menambahkan semua parameter --add-opens seperti yang dinyatakan dalam deskripsi?

Maaf, -J--permit-illegal-access sudah cukup untuk saya kompilasi. Pikir mereka mungkin tidak diperlukan.

@rspilker Terima kasih atas komentarnya. Menambahkan yang berikut ke pom.xml saya tampaknya telah memperbaiki masalah. Saya mendapatkan kegagalan yang berbeda sekarang, tetapi tampaknya tidak ada hubungannya dengan lombok.

<fork>true</fork>
<compilerArgs>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
</compilerArgs>

Apa rencana jangka panjang untuk Lombok mengingat Anda tidak dapat menambahkan pembukaan di masa mendatang?

Saya bertanya karena menurut saya kami tidak memiliki kemampuan untuk mengatur sakelar di atas untuk kompiler bawaan Netbeans tanpa mengubah kode sumber IDE dan saya curiga saya akan menghadapi perlawanan jika saya meminta mereka untuk ditambahkan.

Saya tidak tahu apa-apa tentang implementasi Lombok tetapi hanya untuk menunjukkan beberapa detail dalam jejak tumpukan di atas:

java.lang.IllegalArgumentException: URI memiliki komponen otoritas
di sun.nio.fs.UnixUriUtils.fromUri(UnixUriUtils.java:53)
di sun.nio.fs.UnixFileSystemProvider.getPath(UnixFileSystemProvider.java:98)

Ini adalah pengecualian khusus Unix. Apakah ada kemungkinan URI ke file di Windows telah ditemukan untuk digunakan di mesin Linux atau OS X?

Juga pada anotasi @Generated lalu lihat javax.annotation.processing.Generated . Mungkin itu yang ingin Anda gunakan ke depan karena modul java.xml.ws sudah tidak digunakan lagi untuk dihapus.

@cowwoc [Re: Rencana jangka panjang dalam menghadapi pembatasan masa depan pada apa yang dapat Anda akses dengan refleksi]:

Dalam urutan:

  1. Bekerja dengan alat yang relevan untuk memperbaikinya, misalnya dengan memberi tahu mereka sakelar terbuka mana yang harus ditambahkan agar ini berfungsi.
  2. Jika gagal, kami memiliki beberapa peretasan yang lebih mewah di kotak peralatan kami yang dapat kami terapkan di sini.
  3. Jika tidak, kami dapat mengatur jalan masuk kami dan mengatur berbagai hal agar berjalan lancar. Kami sudah melakukan ini untuk gerhana. Ini akan menjadi ketidaknyamanan kecil.
  4. Jika gagal, kirimkan alat untuk 'memperbaiki' JDK Anda yang cukup drastis dan bukan sesuatu yang mungkin kami bidik. Tapi kita cukup jauh ke ujung yang dalam jika kita turun ke opsi # 4.

Tentu saja, jika kompiler menambahkan hal-hal yang kita butuhkan, kita dapat menghilangkan refleksi sepenuhnya.

java.lang.IllegalArgumentException: URI has an authority component telah diselesaikan di 1.16.18.

Masalah atau gangguan lain yang mungkin terjadi, ConstructorProperties tinggal di modul java.desktop , yang menyeret banyak kesalahan saat mencoba membangun runtime minimal untuk container.

java.management.ConstructorProperties adalah alternatif untuk java.beans.ConstructorProperties yang didukung oleh JMX.

@rspilker

Saya menambahkan compilerArgs ke maven-compiler-plugin, tidak berfungsi, masih melaporkan kesalahan kompilasi.

 <compilerArgs>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                        <arg>-J--add-opens -Jjdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                    </compilerArgs>

Menggunakan maven, solusi untuk menambahkan beberapa argumen -J--add-opens ke compiler tidak akan membantu Anda untuk saat ini karena bug di compiler-plugin. Silakan pilih masalah MCOMPILER-291 untuk memperbaikinya.

Satu hal lagi, itu dikompilasi di mesin saya, tetapi mungkin saya tidak gagal pada peringatan.

Instruksi baru untuk maven. Saya menjalankannya tanpa peringatan.

1) Memiliki lombok.config yang berisi lombok.addJavaxGeneratedAnnotation = false
2) Konfigurasikan plugin kompiler untuk melakukan fork dan berikan banyak argumen kompiler:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>lombok-jdk9</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.9</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <fork>true</fork>
                    <compilerargs>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                    </compilerargs>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>   
    </dependencies>

</project>

Saya harus menambahkan ketergantungan pada

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
</dependency>

juga untuk membuat komentar sebelumnya berfungsi untuk saya

Itu, atau ubah lombok.config untuk tidak lagi menghasilkan ConstructorProperties

@rspilker Saya masih mendapatkan peringatan dengan solusi dari komentar Anda:

[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ apikey-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 207 source files to /home/test/target/classes
[WARNING] WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: Unknown module: -Jjdk.compiler specified to --add-opens
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by lombok.javac.apt.LombokProcessor to field com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs
WARNING: Please consider reporting this to the maintainers of lombok.javac.apt.LombokProcessor
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Konfigurasi kompiler saya:

            <plugin>                                                            
                <artifactId>maven-compiler-plugin</artifactId>                  
                <version>3.7.0</version>                                        
                <configuration>                                                 
                    <source>9</source>                                          
                    <target>9</target>                                          
                    <fork>true</fork>                                           
                    <compilerArgs>                                              
                        <arg>-Xlint:all,-processing,-cast,-serial,-try</arg>    
                        <!-- TODO: Enable when lombok fixes problem with Builder.Default -->
                        <!--                                                    
                        <arg>-Werror</arg>                                                                                                                                   
                        -->                                                     
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                        <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                    </compilerArgs>                                             
                    <showWarnings>true</showWarnings>                           
                    <showDeprecation>true</showDeprecation>                     
                </configuration>                                                
            </plugin>    

Menghapus Xlint tidak mengubah apa pun.

Adakah yang menemukan solusi untuk membuat @Builder(toBuilder = true) berfungsi? Saya mendapatkan kesalahan ini pada instruksi ini

incompatible types: bad type in conditional expression
java.util.List<java.lang.String> cannot be converted to boolean` error

(contoh proyek yang dihosting di https://github.com/jonathanlermitage/manon/tree/spring5, lihat komit terakhir)

@krzyk Saya bukan pengguna Maven, tetapi apakah Anda sudah mencoba yang berikut ini:

<arg>-J--add-opens</arg> <arg>-Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
:
etc. for all 9 packages
:
<arg>-J--add-opens</arg> <arg>-Jjdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>

Dalam proyek berbasis Gradle saya --add-opens dan jdk.compiler/...=ALL-UNNAMED adalah dua argumen _separate_ untuk javac, dipisahkan oleh spasi (tidak digabungkan dengan = seperti yang Anda tunjukkan di atas). Saya pikir Gradle menambahkan -J untuk saya, tetapi di Maven Anda mungkin memerlukan -J pada setiap individu <arg> .

Mengingat rilis Java yang lebih baru hanya memperingatkan akses ilegal, tanda-tanda itu tidak akan membuat sesuatu berfungsi, cukup tekan peringatan pada hal-hal yang sudah berfungsi.

Lebih penting lagi, melihat bagaimana JDK10 dikirimkan dalam 6 bulan dengan peringatan ini berubah menjadi kesalahan, Anda mungkin ingin meluangkan waktu untuk memperbaiki masalah mendasar daripada mencoba menutupinya.

Bagaimana cara menghilangkan warning: [options] --add-opens has no effect at compile time saat menggunakan lombok di Java 9? Rupanya, javac tidak menyukai parameter baris perintah --add-opens itu.

Saya mencoba rilis tepi yang memecahkan masalah yang saya miliki untuk Java 9. Kapan ini akan dirilis?

Tidak yakin apakah terkait, tetapi ketika mencoba ini dengan konfigurasi:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <annotationProcessors>
            <annotationProcessor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor
            </annotationProcessor>
        </annotationProcessors>
        <fork>true</fork>
        <compilerArgs>
            <!-- see https://github.com/rzwitserloot/lombok/issues/985 -->
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
            <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
        </compilerArgs>
    </configuration>
</plugin>

Pembangunan gagal di JavaDoc, tidak mampu mengatasi @__

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.0.0-M1:jar (attach-javadocs) on project persistence: MavenReportException: Error while generating Javadoc:
[ERROR] Exit code: 1 - warning: unknown enum constant XmlAccessType.FIELD
[ERROR]   reason: class file for javax.xml.bind.annotation.XmlAccessType not found
[ERROR] /some/dir/JooqModule.java:44: error: cannot find symbol
[ERROR]     @RequiredArgsConstructor(onConstructor = @__(@Inject))
[ERROR]                                               ^
[ERROR]   symbol:   class __
[ERROR]   location: class JooqModule
[ERROR]
[ERROR] Command line was: /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/javadoc <strong i="10">@options</strong> <strong i="11">@packages</strong>

Apakah ada yang sudah mengatasinya? Kami tidak sabar untuk membuat Java 9 bekerja di sini :D

1.16.18 gagal dengan Java 9.0.1+11:

> Task :compileJava 
warning: [options] --add-opens has no effect at compile time
... warning: lombok.javac.apt.LombokProcessor could not be initialized. Lombok will not run during this compilation: java.lang.IllegalArgumentException: com.sun.tools.javac.api.ClientCodeWrapper$WrappedStandardJavaFileManager extends com.sun.tools.javac.api.ClientCodeWrapper$WrappedJavaFileManager implements javax.tools.StandardJavaFileManager
public class MentionHelper {
       ^
        at lombok.javac.apt.LombokFileObjects.getCompiler(LombokFileObjects.java:130)
        at lombok.javac.apt.InterceptingJavaFileManager.<init>(InterceptingJavaFileManager.java:40)
        at lombok.javac.apt.LombokProcessor.placePostCompileAndDontMakeForceRoundDummiesHook(LombokProcessor.java:164)
        at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:85)
        at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
        at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140)
        at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69)

MEMPERBARUI
Mencoba membangun tepi dan mulai berfungsi, bahkan tanpa --add-opens .

Di bawah macOS 10.13.2 dengan Java 9.0.1+11 saya mendapatkan ini:

PERINGATAN: Operasi akses reflektif ilegal telah terjadi
PERINGATAN: Akses reflektif ilegal oleh lombok.installer.AppleNativeLook ke metode com.apple.eawt.Application.getApplication()
PERINGATAN: Harap pertimbangkan untuk melaporkan ini ke pengelola lombok.installer.AppleNativeLook
PERINGATAN: Gunakan --illegal-access=warn untuk mengaktifkan peringatan operasi akses reflektif ilegal lebih lanjut
PERINGATAN: Semua operasi akses ilegal akan ditolak dalam rilis mendatang
objc[23121]: Kelas FIFinderSyncExtensionHost diimplementasikan di /System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit (0x7fff95a0db68) dan /System/Library/PrivateFrameworks/FileProvider.framework/OverrideBundles MacOS/FinderSyncCollaborationFileProviderOverride (0x16f553cd8). Salah satu dari keduanya akan digunakan. Yang mana yang tidak terdefinisi.

1.16.18 gagal dengan Java 9.0.1:

/home/fedorchuck/Documents/projects/developers-notification/src/main/java/com/github/fedorchuck/developers_notification/antispam/MessageTypes.java:27: 
warning: lombok.javac.apt.LombokProcessor could not be initialized. Lombok will not run during this 
compilation: java.lang.IllegalArgumentException: 
com.sun.tools.javac.api.ClientCodeWrapper$WrappedStandardJavaFileManager extends 
com.sun.tools.javac.api.ClientCodeWrapper$WrappedJavaFileManager implements 
javax.tools.StandardJavaFileManager

public enum MessageTypes {
       ^
    at lombok.javac.apt.LombokFileObjects.getCompiler(LombokFileObjects.java:130)
    at lombok.javac.apt.InterceptingJavaFileManager.<init>(InterceptingJavaFileManager.java:40)
    at lombok.javac.apt.LombokProcessor.placePostCompileAndDontMakeForceRoundDummiesHook(LombokProcessor.java:164)
    at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:85)
    at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
    at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:675)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:774)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:869)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2200(JavacProcessingEnvironment.java:108)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1206)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1315)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1246)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:922)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:48)
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:35)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:98)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
    at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
    at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
    at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:207)
    at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:192)
    at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:124)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.base/java.lang.Thread.run(Thread.java:844)

Bisakah Anda menguji menggunakan rilis tepi ? Kami memang mencoba memperbaikinya dalam versi itu.

Saya dapat mengonfirmasi bahwa kami telah dapat membangun semua proyek kami di Java 9 menggunakan lombok-edge.jar (1.16.19) sebagai dependensi dan memasukkannya ke dalam repositori. Menantikan sampai build ini rilis. :+1:

Catatan tambahan yang berguna: Pastikan Anda menjalankan Java 9 terbaru jika Anda menjalankan OpenJDK (Java 9.0.1, belum dalam apt tetapi file deb tersedia untuk diunduh) dan maven (3.3.0+ atau 3.5.0+). Kami memiliki banyak CompilationError misterius pada versi yang lebih rendah. Saya tidak akan menganggap ini adalah persyaratan agar itu berfungsi tetapi itu pasti membantu kami.

@Foorack Apakah itu termasuk pembaruan Delombok?

@rafalwrzeszcz Saya belum membuat delombok berfungsi, namun, saya tidak tahu apakah itu karena lombok atau plugin pakar (yang tidak menggunakan tepi).

Rilis tepi memperbaiki sebagian besar masalah bagi saya, tetapi saya masih mendapatkan peringatan berikut dari Maven:

--- maven-compiler-plugin:3.1:compile (default-compile) @ DeepLearning ---
Changes detected - recompiling the module!
Compiling 1 source file to C:\Users\Gili\Documents\NetBeansProjects\DeepLearning\target\classes
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by lombok.javac.apt.LombokProcessor to field com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs
WARNING: Please consider reporting this to the maintainers of lombok.javac.apt.LombokProcessor
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Sejauh yang saya tahu, kompiler menggunakan versi Edge.

Halo @rspilker , dengan rilis tepi apakah ada repositori pakar untuk saya konfigurasikan di pom.xml?

@renatojava AFAIK tidak, saya harus memasukkan lombok-edge.jar sebagai ketergantungan jar file lokal.

@renatojava @Foorack Maven edisi #1519 tentang repositori Maven

mungkin lombok-edge lebih baik berkomitmen ke repositori maven? Suka versi BETA1? Untuk pengujian termudah di gradle dan lain-lain ...

1.16.20 baru saja diunggah ke situs web kami dan akan segera tersedia di maven central.

Saya menganggap ini berarti 1.16.20 menambahkan dukungan JDK 9?
Kerja bagus!

Apakah lombok di Java 9 masih memerlukan flag compiler/konfigurasi maven khusus untuk membuatnya berfungsi? Jika ya, alangkah baiknya jika ini didokumentasikan di situs utama lombok sehingga orang tidak perlu mencari tiket ini untuk mengetahuinya ;-)

Berjalan tanpa config/flag untuk saya.

@rspilker Sekedar catatan bahwa di https://github.com/rzwitserloot/lombok/issues/985#issuecomment -337741287 Anda ada bug dalam opsi, Anda tidak boleh menambahkan -J lagi di baris perintah di sana.

Umumnya Anda menampilkan opsi seperti ini:

 <arg>-J--add-opens=-Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>

Tapi seharusnya:

<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>

(Perhatikan kurangnya -J setelah --add-opens= ).

Saya juga harus menambahkan <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg> (digunakan oleh lombok).

Jadi konfigurasi kerja penuh (bebas peringatan) terlihat seperti ini:

<plugin>
   <artifactId>maven-compiler-plugin</artifactId>                                        
    <version>3.7.0</version>
    <configuration>
        <source>9</source>
        <target>9</target>
        <fork>true</fork>
        <compilerArgs>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
        </compilerArgs>
     <showWarnings>true</showWarnings>                   
    </configuration>                                                
</plugin>                                                           

(BTW. untuk pengguna musim semi, Anda mungkin juga perlu:

<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>

)

Apakah ada yang berhasil mengkompilasi dengan Lombok di jalur modul?

Saya terus-menerus mendapatkan kesalahan berikut:

WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by lombok.javac.apt.LombokProcessor to field com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs WARNING: Please consider reporting this to the maintainers of lombok.javac.apt.LombokProcessor WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release lombok/dummy/ForceNewRound0.java:1: error: file should be on source path, or on patch path for module 1 error

@krzyk Jika Anda memperbarui lombok ke versino 1.16.20 dan kemudian itu akan berfungsi tanpa memerlukan parameter Java tambahan.

@iherasymenko Tolong letakkan lombok di classpath daripada jalur modul. Saat bekerja dengan Java 9, lombok belum menjadi modul AFAIK.

@Foorack dapatkah Anda memberikan contoh bagaimana hal itu dapat dicapai? Saya ingin memiliki module-info.java di dalam modul saya. Bagaimana saya harus merujuk ke lombok di dalamnya?

Saya memiliki masalah yang sama dengan @iherasymenko.
Saya mencoba mengkompilasi modul Java 9 yang menggunakan anotasi lombok.
Maven 3.3.9, Lombok 1.16.20 (Maven 3.5 diuji, tetapi tidak ada bedanya).
Lombok ada di classpath (menurut log debug pakar) seperti yang disarankan @Foorack .

Kesalahan kompilasi:
[ERROR] lombok/dummy/ForceNewRound0.java:[1,1] file should be on source path, or on patch path for module [ERROR] /xxxxxxx/java9test/src/main/java/java9test/model/Group.java:[4,8] package lombok is not visible (package lombok is declared in the unnamed module, but module lombok does not read it)

Menurut kesalahan kompilasi saya berasumsi bahwa lombok menghasilkan 'ForceNewRound0.java'.
Tetapi entah bagaimana javac berpikir, bahwa kelas yang dihasilkan (lebih tepatnya paket kelas) bukan bagian dari modul ini dan menganggap bahwa itu harus menjadi bagian dari modul lain (tidak disebutkan namanya).

Saya mencoba mengedit module-info.java dari modul saya:
requires lombok --> compiler mengeluh bahwa tidak ada modul lombok (ya, itu benar karena tidak ada di jalur modul)

Mungkin entah bagaimana karena modul yang ditautkan tidak boleh berisi paket serupa.
Saya akan mencoba mengkompilasi tanpa maven tetapi dengan args compiler yang disebutkan.
Padahal menurut saya itu masalah yang berbeda.

Memperbarui:
Menggunakan anotasi lombok di dalam modul dan lombok.jar di classpath tidak akan berfungsi karena classpath ('modul tanpa nama') tidak terlihat oleh modul di java9.

Apakah ada solusi untuk membuatnya bekerja dengan module-info ? Ketika saya tidak menggunakan module-info.java semuanya berfungsi dengan baik. Tapi begitu saya tambahkan, sepertinya lombok sudah tidak jalan lagi. Di IntelliJ anotasi dikenali, dan tidak memberikan kesalahan, sampai Anda benar-benar mencoba menjalankannya. Maka sepertinya tidak memiliki kode yang dihasilkan oleh Lombok.

Selain itu, kerja bagus membuat ini berfungsi di Java 9 !! ❤️

Aku hampir sampai. Besok malam akan ada rilis edge dengan dukungan awal.

Oke semuanya, coba ini:

https://projectlombok.org/setup/javac

diperbaiki melalui sekelompok komit:

fee0ad33abceb0219076dde05c9d5d9ba950000f melalui bb95ad218d29a9f5b1011b7c7b919ed41337a00b

Dalam kasus saya, saya terus-menerus mendapatkan pengecualian berikut saat mengkompilasi proyek saya dengan rilis tepi:

javax.annotation.processing.FilerException: Module: myModule does not exist.
    at jdk.compiler/com.sun.tools.javac.processing.JavacFiler.checkOrInferModule(JavacFiler.java:466)
    at jdk.compiler/com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:424)
    at lombok.javac.apt.LombokProcessor.forceNewRound(LombokProcessor.java:365)
    at lombok.javac.apt.LombokProcessor.process(LombokProcessor.java:352)
    at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:115)
    at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:165)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.process(AnnotationProcessor.java:99)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:968)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:884)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2200(JavacProcessingEnvironment.java:108)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1206)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1315)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1246)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:922)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1075)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)

Apakah mungkin untuk memublikasikan rilis snapshot Lombok ke repositori Maven yang tersedia untuk umum, sehingga semua orang dapat menguji build terbaru dengan lebih mudah?

UPD.

Sepertinya saya ada yang salah dalam metode yang mengekstraksi nama modul. Jika modul Java 9 saya memiliki nama berikut test.myModule maka saya mendapatkan pengecualian yang saya sebutkan sebelumnya. Tetapi jika saya mengubahnya menjadi, katakanlah, myModule maka saya mendapatkan kesalahan berikut:

lombok/dummy/ForceNewRound0.java:[1,1] file should be on source path, or on patch path for module

@rspilker (pid)
Kompilasi masih gagal dengan versi Edge. Saya pikir Lombok harus secara resmi menghentikan kompatibilitas Java9.
Banyak kriteria yang harus dikerjakan ulang ( @Log4j2 dll...)

Menurut pendapat saya, kesalahan terbesar Lombok adalah menggunakan generasi bytecode. Anda dapat mencapai hal yang sama menggunakan pembuatan kode waktu kompilasi dan Anda tidak akan memiliki masalah kompatibilitas dengan JDK, IDE. Kode yang dihasilkan akan lebih mudah untuk di-debug juga setelah "keajaiban" tidak ada lagi. Harap pertimbangkan untuk membunuh generasi bytecode.

@Slf4j tidak berfungsi di Java 9 , dan module-info.java menambahkan 'memerlukan lomlok statis', tidak dapat menemukan simbol: log variabel saat mengkompilasi ide EAP intellij 2018, dan menginstal plugin lombok, gunakan lomlok.jar dengan versi terbaru ( 1.16.20).

@godpit apakah Anda memiliki proyek contoh (pada dasarnya contoh Minimal, Lengkap, dan Dapat Diverifikasi)?
Apakah ini berfungsi di IDEA 2017?

Dalam proyek saya @SLF4j bekerja di IntlelliJ 2017.5 menggunakan kompiler Java 9. Saya pikir plugin lombok tidak kompatibel dengan EAP 2018 terbaru.

+1, plugin Lombok belum kompatibel dengan IntelliJ 2018 EAP.
Cobalah untuk mengkompilasi proyek Anda dengan baris perintah. Jika gagal juga, jangan gunakan module-info sama sekali.

@krzyk Saya mencoba menggunakan intellij 2017.3.4, tetapi juga tidak berhasil, namun saya mencoba menggunakan Java 8, itu berfungsi dengan baik.

Lombok di Eclipse gagal membangun dengan kesalahan berikut saat menambahkan modul-info.java ke proyek:

Terjadi kesalahan selama pembuatan.
Terjadi kesalahan saat menjalankan 'Java Builder' pada 'entitas' proyek.
Jenis kolam konstan tidak diketahui 19

Saya menguji pengaturan proyek minimal dengan rilis tepi. Segera setelah saya menambahkan module-info.java dengan satu baris requires static lombok pembuatan kode berhenti bekerja: tidak ada getter yang dihasilkan.
Jika saya menghapus modul-info berfungsi lagi. Saya menggunakan proyek ini sebagai dasar untuk eksperimen saya:
https://github.com/krzyk/lombok-jdk10-example

1.18.0 masih tidak berfungsi dengan module-info.java (IntelliJ IDEA 2018.1.3), meskipun rilis 1.16.22 memiliki catatan ini:

PLATFORM: Perbaikan untuk menggunakan lombok bersama dengan fitur module-info.java baru JDK9+. Edisi #985

Setelah memindahkan lombok ke jalur kelas, kompilasi berhasil, tetapi ketika saya menjalankan aplikasi saya mendapatkan kesalahan ini:

Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Module lombok does not read a module that exports org.mapstruct.ap.spi

Saya mendapatkan kesalahan yang sama.
Dalam proyek Modul Java 11 saya, saya telah menambahkan ketergantungan Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.2</version>
    <scope>provided</scope>
</dependency>

Dalam info modul saya, saya menambahkan

requires static lombok

tetapi ketika saya menjalankan aplikasi saya di Eclipse Photon saya mendapatkan kesalahan:

Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Module lombok does not read a module that exports org.mapstruct.ap.spi

Kesalahan: java.lang.module.ResolutionException: Modul lombok tidak membaca modul yang mengekspor org.mapstruct.ap.spi

Edisi #1806 - masalah di atas telah diselesaikan dalam versi edge.

Versi tepi apa? Saya menggunakan yang terbaru (119-769185e1 - dari sini ) dan masih ada.

Untuk memperjelas maksud saya kesalahan mapstruct masih ada - nama yang mengandung masalah titik memang telah diselesaikan :)

@hughjdavey versi 'tepi' dapat diunduh dari sini https://projectlombok.org/download-edge

@hughjdavey ya kesalahan mapstruct masih ada,

@hughjdavey Apakah Anda juga menambahkan mapstruct-processor-1.3.0.Beta1.jar ke jalur modul Anda? Ketika saya melakukan itu kesalahannya hilang.

Maaf saya bisa menyebutkan tentang prosesor-mapstruct.
Bagi saya ini berfungsi juga dengan versi final saat ini 1.2.0.Final pom.xml .

@tzieleniewski jadi tidak perlu melakukan --add-modules Saya bisa menambahkannya sebagai ketergantungan di build.gradle (seperti yang telah Anda lakukan di file maven Anda)?

@arrowman53 bagaimana saya melakukannya? Apakah itu salah satu dari flag --add-modules atau --add-reads itu?

@hughjdavey Ya, ini --add-modules yang Anda butuhkan untuk menambahkannya.

@hughjdavey Saya tidak akrab dengan Gradle tetapi penyelidikan saya dengan Maven menunjukkan bahwa Maven selama kompilasi menambahkan ke jalur modul dependensi yang merupakan JAR modular, dependensi lain ditambahkan ke classpath (modul tanpa nama).

Jadi dalam kasus saya bukan --add-modules yang hilang. Saya perlu memperluas daftar modul yang dapat diamati. Untuk tujuan itu saya menggunakan parameter --upgrade-module-path. Jika tidak, org.mapstruct.ap.spi, sebagai JAR bukan modular, tidak akan dapat disolder ulang.

Pada titik ini, lombok berfungsi dengan baik di jdk9. Saya melihat banyak komentar, banyak referensi gradle dan semacamnya. Itu masalah yang berbeda (dan berbagai masalah bertahap telah diajukan).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat