Không thể sử dụng Intellij với thư mục nguồn đã tạo


87

Câu hỏi liên quan Làm thế nào để định cấu hình IntelliJ IDEA và / hoặc Maven để tự động thêm các thư mục với mã nguồn Java được tạo bằng jaxb2-maven-plugin?

Tôi có một plugin tùy chỉnh tạo nguồn trong target/generated-sources(Lưu ý không có tên công cụ nào ở đây). Vì vậy, tôi nhận được các nguồn như target/generated-sources/com/mycompany... vv.

Không thể thay đổi định dạng này, vì vậy tôi sẽ có thể định cấu hình Intellij để thêm nó làm thư mục nguồn. Hiện tại, tôi có thể thấy rằng Intellij đã được thêm vào target/generated-sources/comlàm thư mục nguồn.

Xin lưu ý rằng tôi không có tùy chọn cấu hình plugin!

CẬP NHẬT 1 : Tôi không đồng ý với thực tế là tôi PHẢI đặt các nguồn đã tạo của mình trong một thư mục tên công cụ. Nó có thể là một quy ước tốt, nhưng nếu tôi chỉ có một máy phát điện thì không cần tôi phải đặt nó ở đó? Một lần nữa, trong pom.xml của tôi, tôi có một resourcesphần chỉ ra rõ ràng rằng target/generated-sourcesnên được coi như một thư mục nguồn. Điều này hoạt động hoàn toàn tốt trong Eclipse vì vậy tôi không biết tại sao Intellij lại không tôn trọng cài đặt của tôi.

TL; DR -> Khi tôi đưa target/generated-sourcesvào phần tài nguyên, pom.xmltại sao Intellij lại quá nóng vội khi thêm target/generated-sources/comvào classpath?



Hãy thử giải pháp này, nó có thể giải quyết vấn đề của bạn. bấm vào đây để có giải pháp
Asad Abdin

Hãy thử giải pháp này, nó có thể giải quyết vấn đề của bạn. bấm vào đây để có giải pháp
Asad Abdin

Câu trả lời:


139

Bạn chỉ có thể thay đổi cấu trúc dự án để thêm thư mục đó làm thư mục "nguồn".

Cấu trúc dự án → Mô-đun → Nhấp vào generated-sourcesthư mục và biến nó thành một sourcesthư mục.

Hoặc là:

<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
Tùy chọn này nghe có vẻ thú vị. Tôi sẽ mất cài đặt này mỗi khi tôi chạy "mvn idea: idea". Có cách nào để khai báo một plugin ý tưởng maven với "giải pháp thay thế" này không?
Kannan Ekanath

3
Bạn không thể thêm thư mục nguồn đã tạo nếu nó đang được xây dựng vì IDEA loại trừ thư mục xây dựng.
NBW 13/1213

1
@NBW bạn không thể thủ công, vâng. Nhưng nếu bạn xóa mô-đun của mình và sau đó nhập lại, (với plugin này được thiết lập), ý tưởng sẽ nhận ra mọi thứ một cách chính xác.
Zoltán

3
Bạn cũng có thể nhấp chuột phải vào bất kỳ thư mục nào và sử dụng "đánh dấu thư mục là"
Pieter De Bie

5
Mặc dù pom.xml của tôi chứa đoạn mã này, IDEA không thấy các nguồn được tạo. Chạy mvn idea:ideagiải quyết vấn đề trong trường hợp của tôi. Đối với hồ sơ.
mmdemirbas

77

Tôi đang sử dụng giải pháp Maven (ứng dụng SpringBoot) là:

  1. Nhấp chuột phải vào thư mục dự án
  2. Chọn Maven
  3. Chọn Tạo nguồn và cập nhật thư mục

Sau đó, Intellij tự động nhập các nguồn đã tạo để chiếu.


Hoạt động mà không làm rối cấu trúc thư mục của chính mình!
szab.kel

Câu trả lời này xứng đáng để được cao hơn - thuận tiện hơn nhiều so với câu trả lời được chấp nhận
stusrob

5
Chú ý rằng trong phiên bản mới nhất của Intellij 2019,1, bạn có thể nhấp vào nút thứ hai trong menu maven (ở bên phải, mở rộng maven sidebar, ở trên cùng, nút thứ hai)
Roeland Van Heddegem

Tôi cũng đã phải kiểm tra cài đặt maven của mình .xml đã trỏ đến sai repo mặc định không phải
Jonathan

22

Với gradle, cài đặt dự án sẽ bị xóa bất cứ khi nào bạn làm mới cài đặt gradle. Thay vào đó, bạn cần thêm các dòng sau (hoặc tương tự) trong build.gradle của mình, tôi đang sử dụng kotlin nên:

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

Điều này làm việc cho tôi cho cả nhập dự án của IntelliJ và gradle idea. Cảm ơn! :)
Chris Cooper

Có - mẹo tốt nhất hiện có. George đã tức giận!
Hoobajoob

Làm việc cho tôi. Tôi đã sử dụng giải pháp này với kịch bản mapstruct, springframework và componentModel = "spring"
dwilda

16

Sự sửa chữa

Đi tới Cấu trúc dự án - Mô-đun - Thư mục nguồn và tìm target/generated-sources/antlr4/com/mycompany- nhấp vào Chỉnh sửa thuộc tính và đặt tiền tố Gói thành com.mycompany.

Đây chính xác là lý do tại sao chúng ta có thể đặt tiền tố Gói trên dirs nguồn.


Vấn đề khác nhau nhưng có liên quan ở đây


1
Bản sửa lỗi này là bản sửa lỗi duy nhất phù hợp với tôi sau DAYS kể từ ngày xem xét. Cảm ơn!
user1660256,

Ồ, cảm ơn, tôi vừa cập nhật intellij và họ đã thay đổi biểu tượng của mình. Tôi không nghĩ rằng thư mục màu cam có nghĩa là nó không phải là nguồn.
Pieter De Bie

nửa ngày nay tôi đã tìm kiếm cái này. Đã làm việc cho tôi với antlr4. Cảm ơn!
Piotr Tempes

1
Đối với ANTLR> = 4.5.3 (có thể sớm hơn), miễn là ngữ pháp của tôi được đặt ở trong src/main/antlr4/<path-to-package>/, thì nó sẽ xuất hiện trong target/generated-sources/antlr4/<path-to-package>. IntelliJ tự động đánh dấu thư mục chính xác làm thư mục gốc và không cần tiền tố gói. Tôi nghi ngờ rằng bản sửa lỗi này là cần thiết khi mọi người đặt trực tiếp ngữ pháp của họ vào src/main/antlr4, điều này thường được khuyến nghị vì một số lý do.
Alex Reinking

5

Ai đã viết plugin đó làm hỏng thời gian lớn. Đó không phải là cách để làm điều đó!

Bất kỳ giải pháp nào sẽ là một vụ hack lớn, hãy làm cho nhà phát triển plugin biết về lỗi của mình.

Xin lỗi, đó là điều duy nhất cần làm.


OK, đây là một bản hack, ngay sau khi thực thi plugin của bạn, hãy sử dụng plugin chống chạy để di chuyển thư mục đến nơi khác:

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

Trong ví dụ này, toolnamenên được thay thế bằng bất kỳ thứ gì xác định duy nhất plugin đã tạo mã và comlà viết tắt của gốc của các gói đã tạo. Nếu bạn có nhiều gốc gói, bạn có thể cần nhiều <move>tác vụ.

Nhưng nếu plugin thêm thư mục làm thư mục nguồn, thì bạn đã gặp rắc rối.


Cảm ơn Sean. Tôi thực sự quan sát thấy rằng Intellij thêm cả target / created-sources / com cũng như target / created-sources (điều này được thêm vào dưới dạng thư mục nguồn một cách rõ ràng trong phần "resource"). Có cách nào khác để ngăn chặn điều đầu tiên xảy ra. Nếu Không, thì tôi sẽ thử cách giải quyết khác của bạn.
Kannan Ekanath

1
Có, tác giả nên có sử dụng target/generated-sources/my-tool.
Vlastimil Ovčáčík


1

Tôi đã gặp vấn đề tương tự với Eclipse vài tháng trước khi nhập dự án của mình. Bây giờ tôi cũng vậy với intelliJ. Đây là cách ai đó đã giúp tôi giải quyết vấn đề này trong IntelliJ:

Menu => View => Tools windows => Maven Project Trong giá trị spring_user => Run Configuration, chọn clean install. Thao tác này sẽ thực hiện cài đặt sạch và sau đó, bạn sẽ có thể thấy các lớp nhập mô tả hình ảnh ở đây


1

Đã giải quyết nó bằng cách loại bỏ "Bị loại trừ" trong cài đặt mô-đun (nhấp chuột phải vào dự án, "Mở cài đặt mô-đun"). nhập mô tả hình ảnh ở đây


0

Điều kiện làm việc duy nhất, sau nhiều lần thử, là xóa thư mục .idea ẩn khỏi thư mục dự án gốc và nhập lại từ Intellij


0

Tôi muốn cập nhật nhận xét trước đó của DaShaun , nhưng vì đây là lần đầu tiên tôi nhận xét nên ứng dụng không cho phép tôi.

Tuy nhiên, tôi đang sử dụng eclipse và sau khi tôi thêm đoạn mã đề cập bên dưới vào pom.xml của mình theo đề xuất của Dashun và tôi đã chạy gói sạch mvn để tạo tệp nguồn avro, nhưng tôi vẫn gặp lỗi biên dịch trong không gian làm việc.

Tôi nhấp chuột phải vào project_name -> maven -> update project và cập nhật dự án, nó đã thêm target / created-sources làm thư mục nguồn vào dự án eclipse của tôi.

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.