Tidak dapat menggunakan Intellij dengan folder sumber yang dibuat

87

Pertanyaan terkait Bagaimana cara mengkonfigurasi IntelliJ IDEA dan / atau Maven agar secara otomatis menambahkan direktori dengan kode sumber Java yang dibuat menggunakan jaxb2-maven-plugin?

Saya memiliki plugin khusus yang menghasilkan sumber di bawah target/generated-sources(Perhatikan tidak ada nama alat di sini). Jadi saya mendapatkan sumber seperti target/generated-sources/com/mycompany... dll.

Format ini tidak dapat diubah sama sekali, jadi saya akan dapat mengkonfigurasi Intellij agar menambahkannya sebagai folder sumber. Sampai sekarang, saya dapat melihat bahwa Intellij telah ditambahkan target/generated-sources/comsebagai folder sumber.

Harap dicatat bahwa saya tidak memiliki opsi untuk mengkonfigurasi plugin!

UPDATE 1 : Saya tidak setuju dengan fakta bahwa saya HARUS meletakkan sumber yang saya buat di bawah folder nama alat. Ini mungkin konvensi yang bagus, tetapi jika saya hanya memiliki satu generator, tidak perlu saya taruh di sana? Sekali lagi, di pom.xml saya, saya memiliki resourcesbagian yang dengan jelas menunjukkan bahwa target/generated-sourcesharus diperlakukan sebagai folder sumber. Ini berfungsi dengan baik di Eclipse jadi saya tidak tahu mengapa Intellij tidak akan menghormati pengaturan saya.

TL; DR -> Ketika saya meletakkan target/generated-sourcesdi bagian sumber daya pom.xmlmengapa Intellij terlalu bersemangat untuk menambahkan target/generated-sources/comke classpath?

Kannan Ekanath
sumber
Coba solusi ini, ini mungkin menyelesaikan masalah Anda. klik di sini untuk solusinya
Asad Abdin
Coba solusi ini, ini mungkin menyelesaikan masalah Anda. klik di sini untuk solusinya
Asad Abdin

Jawaban:

141

Anda bisa mengubah struktur proyek untuk menambahkan folder itu sebagai direktori "sumber".

Project Structure → Modules → Klik generated-sourcesfolder dan jadikan sebagai sourcesfolder.

Atau:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
DaShaun
sumber
4
Opsi ini terdengar menarik. Saya akan kehilangan pengaturan ini setiap kali saya menjalankan "mvn idea: idea". Apakah ada cara untuk mendeklarasikan plugin ide maven dengan "solusi" ini?
Kannan Ekanath
3
Anda tidak dapat menambahkan folder sumber yang dihasilkan jika sedang dibangun karena IDEA mengecualikan folder pembangunan.
NBW
1
@NBW kamu tidak bisa secara manual, ya. Tetapi jika Anda menghapus modul Anda dan kemudian mengimpornya kembali, (dengan plugin ini disiapkan), ide mengenali semuanya dengan benar.
Zoltán
3
Anda juga dapat mengklik kanan folder apa pun dan menggunakan "tandai direktori sebagai"
Pieter De Bie
5
Meskipun pom.xml saya berisi cuplikan ini, IDEA tidak melihat sumber yang dihasilkan. Menjalankan mvn idea:ideamemecahkan masalah dalam kasus saya. Untuk catatan.
mmdemirbas
82

Saya menggunakan solusi Maven (SpringBoot application) adalah:

  1. Klik kanan folder proyek
  2. Pilih Maven
  3. Pilih Hasilkan Sumber dan Perbarui Folder

Kemudian, Intellij secara otomatis mengimpor sumber yang dihasilkan ke proyek.

Mehmet Hanoğlu
sumber
Bekerja tanpa mengacaukan struktur folder sendiri!
szab.kel
Jawaban ini layak untuk lebih tinggi - jauh lebih nyaman daripada jawaban yang diterima
stusrob
5
Perhatikan bahwa di versi terbaru Intellij 2019.1, Anda dapat mengklik tombol kedua di menu maven (di sebelah kanan, perluas sidebar maven, di atas, tombol kedua)
Roeland Van Heddegem
Saya juga harus memeriksa setting.xml maven saya yang mengarah ke repo bukan default yang salah
Jonathan
Bekerja seperti pesona!
marcin.programuje
22

Dengan gradle, pengaturan proyek akan dihapus setiap kali Anda menyegarkan pengaturan gradle. Sebagai gantinya Anda perlu menambahkan baris berikut (atau serupa) di build.gradle Anda, saya menggunakan kotlin jadi:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
zhywu
sumber
Ini berhasil bagi saya untuk impor proyek IntelliJ dan gradle idea. Terima kasih! :)
Chris Cooper
Ya - tip terbaik tersedia. George menjadi marah!
Hoobajoob
Bekerja untuk saya. Saya menggunakan solusi ini dengan skenario mapstruct, springframework dan componentModel = "spring"
dwilda
16

Cara mengatasinya

Pergi ke Struktur Proyek - Modul - Folder Sumber dan temukan target/generated-sources/antlr4/com/mycompany- klik Edit properti dan setel Awalan paket ke com.mycompany.

Inilah alasan mengapa kita dapat mengatur awalan Paket pada direktori sumber.


Masalah yang berbeda tetapi terkait di sini

Vlastimil Ovčáčík
sumber
1
Perbaikan ini adalah satu-satunya yang berhasil bagi saya dalam HARI pencarian. Terima kasih!
CNDyson
Oh terima kasih, saya baru saja memperbarui intellij dan mereka telah mengubah ikonnya. Saya tidak berpikir bahwa folder oranye berarti itu bukan sumber.
Pieter De Bie
setengah hari saya telah mencari ini. Bekerja untuk saya dengan antlr4. Terima kasih!
Piotr Tempes
1
Untuk ANTLR> = 4.5.3 (mungkin sebelumnya juga), selama tata bahasa saya berada src/main/antlr4/<path-to-package>/, maka akan muncul di target/generated-sources/antlr4/<path-to-package>. IntelliJ secara otomatis menandai direktori yang benar sebagai root sumber dan tidak diperlukan prefiks paket. Saya menduga perbaikan ini diperlukan ketika orang-orang menempatkan tata bahasa mereka secara langsung src/main/antlr4, yang sering direkomendasikan karena beberapa alasan.
Alex Reinking
5

Siapa pun yang menulis plugin itu mengacaukan banyak waktu. Bukan itu cara melakukannya!

Solusi apa pun akan menjadi peretasan besar, buat pengembang plugin menyadari bugnya.

Maaf, hanya itu yang bisa dilakukan.


Oke, ini retasan, langsung setelah eksekusi plugin Anda, gunakan plugin antrun untuk memindahkan direktori ke tempat lain:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
      <execution>
        <phase>process-sources</phase>
        <configuration>
          <target>
            <move todir="${project.build.directory}/generated-sources/toolname/com"
                  overwrite="true">
                <fileset dir="${project.build.directory}/generated-sources/com"/>
            </move>
          </target>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
</plugin>

Dalam contoh ini, toolnameharus diganti dengan apa pun yang secara unik mengidentifikasi plugin yang membuat kode dan comsingkatan dari root dari paket yang dibuat. Jika Anda memiliki beberapa root paket, Anda mungkin memerlukan banyak <move>tugas.

Tetapi jika plugin menambahkan folder sebagai folder sumber, maka Anda gagal.

Sean Patrick Floyd
sumber
Terima kasih Sean. Saya benar-benar mengamati bahwa Intellij menambahkan target / generated-sources / com serta target / generated-sources (ini ditambahkan sebagai direktori sumber secara eksplisit di bagian "resource"). Apakah ada cara lain untuk mencegah hal pertama terjadi. Jika Tidak, maka saya akan mencoba solusi Anda.
Kannan Ekanath
1
Ya, penulis harus menggunakan target/generated-sources/my-tool.
Vlastimil Ovčáčík
1

Mungkin Anda bisa menambahkan langkah ke fase generate-sources yang memindahkan folder?

Christoffer Hammarström
sumber
1

Saya mengalami masalah yang sama dengan Eclipse beberapa bulan lalu saat mengimpor proyek saya. Sekarang saya memiliki hal yang sama dengan intelliJ. Inilah cara seseorang membantu saya menyelesaikan ini di IntelliJ:

Menu => View => Tools windows => Maven Project Di spring_user value => Run Configuration, pilih clean install. Ini harus melakukan instalasi bersih dan setelah ini Anda akan dapat melihat kelas masukkan deskripsi gambar di sini

ElizabethM
sumber
1

Memecahkannya dengan menghapus "Dikecualikan" dalam pengaturan modul (klik kanan pada proyek, "Buka pengaturan modul"). masukkan deskripsi gambar di sini

JP
sumber
0

Satu-satunya kondisi kerja, setelah beberapa kali mencoba, adalah menghapus folder .idea yang tersembunyi dari folder root project dan mengimpornya kembali dari Intellij

Jonathan
sumber
0

Saya ingin memperbarui pada komentar sebelumnya yang dibuat oleh DaShaun , tetapi karena ini adalah pertama kalinya saya berkomentar, aplikasi tidak mengizinkan saya.

Meskipun demikian, saya menggunakan eclipse dan setelah saya menambahkan potongan kode di bawah ini ke pom.xml saya seperti yang disarankan oleh Dashun dan saya menjalankan paket mvn clean untuk menghasilkan file sumber avro, tetapi saya masih mendapatkan kesalahan kompilasi di ruang kerja.

Saya mengklik kanan project_name -> maven -> perbarui proyek dan memperbarui proyek, yang menambahkan target / generated-sources sebagai folder sumber ke proyek eclipse saya.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
anupam
sumber
0

saya menjalankan mvn generate-resources dan kemudian menandai folder / target / generated-resources sebagai "sources" (Struktur Proyek -> Pengaturan Proyek -> Modul -> Pilih / target / dihasilkan-sumber daya -> Klik ikon "Sumber" berwarna biru.

Preeti Joshi
sumber