ไม่สามารถใช้ Intellij กับโฟลเดอร์ซอร์สที่สร้างขึ้น


87

คำถามที่เกี่ยวข้อง จะกำหนดค่า IntelliJ IDEA และ / หรือ Maven ให้เพิ่มไดเร็กทอรีโดยอัตโนมัติด้วยซอร์สโค้ด Java ที่สร้างโดยใช้ jaxb2-maven-plugin ได้อย่างไร?

ฉันมีปลั๊กอินแบบกำหนดเองที่สร้างแหล่งที่มาภายใต้target/generated-sources(หมายเหตุไม่มีชื่อเครื่องมือที่นี่) ดังนั้นฉันจึงได้รับแหล่งข้อมูลเช่นtarget/generated-sources/com/mycompany... ฯลฯ

รูปแบบนี้ไม่สามารถเปลี่ยนแปลงได้เลยดังนั้นฉันจะสามารถกำหนดค่า Intellij ให้เพิ่มเป็นโฟลเดอร์ต้นทางได้ ณ ตอนนี้ฉันเห็นว่า Intellij ได้เพิ่มtarget/generated-sources/comเป็นโฟลเดอร์ต้นทางแล้ว

โปรดทราบว่าฉันไม่มีตัวเลือกในการกำหนดค่าปลั๊กอิน!

อัปเดต 1 : ฉันไม่เห็นด้วยกับการที่ฉันต้องใส่ซอร์สที่สร้างขึ้นภายใต้โฟลเดอร์ชื่อเครื่องมือ มันอาจจะเป็นหลักการที่ดี แต่ถ้าฉันมีเครื่องกำเนิดไฟฟ้าเพียงเครื่องเดียวฉันไม่จำเป็นต้องวางมันไว้ที่นั่น? อีกครั้งใน pom.xml ของฉันฉันมีresourcesส่วนที่ระบุอย่างชัดเจนว่าtarget/generated-sourcesควรถือเป็นโฟลเดอร์ต้นทาง สิ่งนี้ทำงานได้ดีอย่างสมบูรณ์ใน Eclipse ดังนั้นฉันจึงไม่รู้ว่าทำไม Intellij ถึงไม่เคารพการตั้งค่าของฉัน

TL; DR -> เมื่อฉันใส่target/generated-sourcesในส่วนทรัพยากรpom.xmlว่าทำไม Intellij ถึงต้องเพิ่มลงtarget/generated-sources/comใน classpath มากเกินไป



ลองใช้วิธีนี้อาจช่วยแก้ปัญหาของคุณได้ คลิกที่นี่เพื่อดูวิธีแก้ปัญหา
Asad Abdin

ลองใช้วิธีนี้อาจช่วยแก้ปัญหาของคุณได้ คลิกที่นี่เพื่อดูวิธีแก้ปัญหา
Asad Abdin

คำตอบ:


141

คุณสามารถเปลี่ยนโครงสร้างโปรเจ็กต์เพื่อเพิ่มโฟลเดอร์นั้นเป็นไดเร็กทอรี "ต้นทาง"

โครงสร้างโครงการ→โมดูล→คลิกที่generated-sourcesโฟลเดอร์และทำให้เป็นsourcesโฟลเดอร์

หรือ:

<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>

4
ตัวเลือกนี้ฟังดูน่าสนใจ ฉันจะสูญเสียการตั้งค่านี้ทุกครั้งที่เรียกใช้ "mvn idea: idea" มีวิธีประกาศปลั๊กอินไอเดีย maven ด้วย "วิธีแก้ปัญหา" นี้หรือไม่?
กรรณเอกนาถ

3
คุณไม่สามารถเพิ่มโฟลเดอร์ซอร์สที่สร้างขึ้นหากอยู่ภายใต้บิลด์เนื่องจาก IDEA ไม่รวมโฟลเดอร์บิลด์
NBW

1
@NBW คุณไม่สามารถทำได้ด้วยตนเองใช่ แต่ถ้าคุณลบโมดูลของคุณแล้วนำเข้าใหม่ (ด้วยการตั้งค่าปลั๊กอินนี้) ไอเดียจะจดจำทุกอย่างได้อย่างถูกต้อง
Zoltán

3
คุณสามารถคลิกขวาที่โฟลเดอร์ใดก็ได้และใช้ "ทำเครื่องหมายไดเรกทอรีเป็น"
Pieter De Bie

5
แม้ว่า pom.xml ของฉันจะมีข้อมูลโค้ดนี้ แต่ IDEA ไม่เห็นแหล่งที่มาที่สร้างขึ้น การเรียกใช้mvn idea:ideaช่วยแก้ปัญหาในกรณีของฉัน สำหรับบันทึก
mmdemirbas

83

ฉันใช้โซลูชัน Maven (แอปพลิเคชัน SpringBoot) คือ:

  1. คลิกขวาที่โฟลเดอร์โครงการ
  2. เลือกMaven
  3. เลือกสร้างแหล่งที่มาและอัปเดตโฟลเดอร์

จากนั้น Intellij จะนำเข้าแหล่งที่มาที่สร้างขึ้นไปยังโครงการโดยอัตโนมัติ


ทำงานได้โดยไม่ทำให้โครงสร้างโฟลเดอร์ยุ่งเหยิงด้วยตัวคุณเอง!
szab.kel

คำตอบนี้สมควรจะสูงกว่า - สะดวกกว่าคำตอบที่ยอมรับมาก
stusrob

5
โปรดสังเกตว่าใน Intellij 2019.1 เวอร์ชันล่าสุดคุณสามารถคลิกปุ่มที่สองในเมนู maven (ทางด้านขวาขยายแถบด้านข้าง maven ด้านบนปุ่มที่สอง)
Roeland Van Heddegem

ฉันต้องตรวจสอบ maven settings.xml ของฉันด้วยที่ชี้ไปที่ repo ที่ไม่ถูกต้องไม่ใช่เริ่มต้น
Jonathan

ใช้งานได้อย่างมีเสน่ห์!
marcin.programuje

22

เมื่อใช้ gradle การตั้งค่าโปรเจ็กต์จะถูกล้างเมื่อคุณรีเฟรชการตั้งค่าการไล่ระดับสี แต่คุณต้องเพิ่มบรรทัดต่อไปนี้ (หรือคล้ายกัน) ใน build.gradle ของคุณฉันใช้ kotlin ดังนั้น:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}

สิ่งนี้ใช้ได้ผลกับฉันสำหรับทั้งการนำเข้าโครงการของ IntelliJ และgradle idea. ขอบคุณ! :)
Chris Cooper

ใช่ - มีเคล็ดลับที่ดีที่สุด จอร์จโกรธมาก!
Hoobajoob

เหมาะสำหรับฉัน ฉันใช้โซลูชันนี้กับ mapstruct, springframework และ componentModel = สถานการณ์ "spring"
dwilda

16

การแก้ไข

ไปที่โครงสร้างโครงการ - โมดูล - แหล่งที่มาของโฟลเดอร์และหาtarget/generated-sources/antlr4/com/mycompany- คลิกแก้ไขคุณสมบัติและการตั้งค่าแพคเกจคำนำหน้าcom.mycompanyไป

นี่คือเหตุผลว่าทำไมเราจึงสามารถตั้งค่าคำนำหน้าแพ็กเกจบนไดร์ต้นทางได้


ปัญหาที่แตกต่างกัน แต่เกี่ยวข้องกันที่นี่


1
การแก้ไขนี้เป็นวิธีเดียวที่ใช้ได้ผลสำหรับฉันใน DAYS ของการค้นหา ขอบคุณ!
CNDyson

ขอบคุณมากฉันเพิ่งอัปเดต intellij และพวกเขาได้เปลี่ยนไอคอนแล้ว ฉันไม่คิดว่าโฟลเดอร์สีส้มจะหมายความว่าไม่ใช่แหล่งที่มา
Pieter De Bie

ครึ่งวันฉันมองหาสิ่งนี้ ทำงานให้ฉันด้วย antlr4 ขอบคุณ!
Piotr Tempes

1
สำหรับ ANTLR> = 4.5.3 (อาจจะก่อนหน้านี้ด้วย) ตราบใดที่ไวยากรณ์ของฉันยังอยู่ในsrc/main/antlr4/<path-to-package>/นั้นก็จะปรากฏในtarget/generated-sources/antlr4/<path-to-package>. IntelliJ ทำเครื่องหมายไดเร็กทอรีที่ถูกต้องเป็นรูทต้นทางโดยอัตโนมัติและไม่จำเป็นต้องมีคำนำหน้าแพ็กเกจ ฉันสงสัยว่าจำเป็นต้องมีการแก้ไขนี้เมื่อผู้คนวางไวยากรณ์โดยตรงsrc/main/antlr4ซึ่งมักจะแนะนำด้วยเหตุผลบางประการ
Alex Reinking

5

ใครก็ตามที่เขียนปลั๊กอินนั้นทำให้เสียหายครั้งใหญ่ นั่นไม่ใช่วิธีที่จะทำได้!

วิธีแก้ปัญหาใด ๆ ที่จะเป็นการแฮ็กครั้งใหญ่โปรดแจ้งให้นักพัฒนาปลั๊กอินทราบถึงข้อบกพร่องของเขา

ขออภัยนั่นเป็นสิ่งเดียวที่ต้องทำ


ตกลงนี่คือแฮ็คโดยตรงหลังจากการเรียกใช้ปลั๊กอินของคุณใช้ปลั๊กอิน antrun เพื่อย้ายไดเรกทอรีไปที่อื่น:

<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>

ในตัวอย่างนี้toolnameควรแทนที่ด้วยอะไรก็ตามที่ระบุปลั๊กอินที่สร้างโค้ดโดยไม่ซ้ำกันและcomย่อมาจากรูทของแพ็กเกจที่สร้างขึ้น หากคุณมีรากแพ็กเกจหลายรายการคุณอาจต้อง<move>ทำงานหลายอย่าง

แต่ถ้าปลั๊กอินเพิ่มโฟลเดอร์เป็นโฟลเดอร์ต้นทางแสดงว่าคุณเมา


ขอบคุณฌอน ฉันสังเกตเห็นว่า Intellij เพิ่มทั้งเป้าหมาย / แหล่งที่มา / com รวมทั้งเป้าหมาย / แหล่งที่มาที่สร้างขึ้น (สิ่งนี้ถูกเพิ่มเป็นไดเรกทอรีต้นทางอย่างชัดเจนในส่วน "ทรัพยากร") มีวิธีอื่นอีกไหมที่จะป้องกันไม่ให้สิ่งแรกเกิดขึ้น ถ้าไม่ฉันจะลองวิธีแก้ปัญหาของคุณ
กรรณเอกนาถ

1
target/generated-sources/my-toolใช่ผู้เขียนควรจะมีการใช้งาน
Vlastimil Ovčáčík


1

ฉันมีปัญหาเดียวกันกับ Eclipse เมื่อสองสามเดือนก่อนเมื่อนำเข้าโครงการของฉัน ตอนนี้ฉันก็เหมือนกันกับ intelliJ นี่คือวิธีที่ใครบางคนช่วยฉันแก้ปัญหานี้ใน IntelliJ:

Menu => View => Tools windows => Maven Project ในค่า spring_user => เรียกใช้การกำหนดค่าเลือกการติดตั้งใหม่ทั้งหมด สิ่งนี้ควรทำการติดตั้งใหม่ทั้งหมดและหลังจากนี้คุณจะสามารถเห็นคลาสได้ ป้อนคำอธิบายภาพที่นี่


1

แก้ไขได้โดยการลบ "Excluded" ในการตั้งค่าโมดูล (คลิกขวาที่ project "Open module settings") ป้อนคำอธิบายภาพที่นี่


0

เงื่อนไขการทำงานเดียวหลังจากพยายามหลายครั้งคือการลบโฟลเดอร์ .idea ที่ซ่อนอยู่ออกจากโฟลเดอร์รูทโปรเจ็กต์และนำเข้าใหม่จาก Intellij


0

ฉันต้องการอัปเดตความคิดเห็นก่อนหน้านี้ของDaShaunแต่เนื่องจากเป็นการแสดงความคิดเห็นครั้งแรกแอปพลิเคชันไม่อนุญาตให้ฉัน

อย่างไรก็ตามฉันใช้ eclipse และหลังจากที่ฉันเพิ่มข้อมูลโค้ดที่กล่าวถึงด้านล่างลงใน pom.xml ตามที่ Dashun แนะนำและฉันรันแพ็คเกจ mvn clean เพื่อสร้างไฟล์ต้นฉบับ avro แต่ฉันยังคงได้รับข้อผิดพลาดในการคอมไพล์ในพื้นที่ทำงาน

ฉันคลิกขวาที่ project_name -> maven -> อัปเดตโปรเจ็กต์และอัปเดตโปรเจ็กต์ซึ่งเพิ่มเป้าหมาย / แหล่งที่มาที่สร้างเป็นโฟลเดอร์ต้นทางในโปรเจ็กต์คราสของฉัน

<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>

0

ฉันรัน mvn สร้างทรัพยากรจากนั้นทำเครื่องหมายโฟลเดอร์ / target / created-resources เป็น "แหล่งที่มา" (โครงสร้างโครงการ -> การตั้งค่าโครงการ -> โมดูล -> เลือก / เป้าหมาย / สร้างทรัพยากร -> คลิกที่ไอคอน "แหล่งที่มา" สีน้ำเงิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.