생성 된 소스 폴더에서 Intellij를 사용할 수 없습니다.


87

관련 질문 jaxb2-maven-plugin을 사용하여 생성 된 Java 소스 코드로 디렉토리를 자동으로 추가하도록 IntelliJ IDEA 및 / 또는 Maven을 구성하는 방법은 무엇입니까?

소스를 생성하는 사용자 정의 플러그인이 있습니다 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-> Intellij 가 클래스 경로 에 추가하는 데 과도하게 많은 target/generated-sources리소스 섹션을 넣을 때 ?pom.xmltarget/generated-sources/com



이 해결 방법을 시도하면 문제가 해결 될 수 있습니다. 솔루션을 보려면 여기를 클릭
아사드 아브 딘에게

이 해결 방법을 시도하면 문제가 해결 될 수 있습니다. 솔루션을 보려면 여기를 클릭
아사드 아브 딘에게

답변:


139

프로젝트 구조를 변경하여 해당 폴더를 "소스"디렉토리로 추가 할 수 있습니다.

프로젝트 구조 → 모듈 →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 아이디어 플러그인을 선언하는 방법이 있습니까?
Kannan Ekanath 2011 년

3
IDEA는 빌드 폴더를 제외하기 때문에 생성 된 소스 폴더가 빌드중인 경우 추가 할 수 없습니다.
NBW

1
@NBW 수동으로 할 수 없습니다. 그러나 모듈을 삭제 한 다음 다시 가져 오면 (이 플러그인이 설정된 상태에서) idea는 모든 것을 올바르게 인식합니다.
Zoltán 2015 년

3
또한 폴더를 마우스 오른쪽 버튼으로 클릭하고 "다음으로 디렉토리 표시"를 사용할 수 있습니다.
Pieter De Bie

5
내 pom.xml에이 스 니펫이 포함되어 있지만 IDEA는 생성 된 소스를 보지 못했습니다. mvn idea:idea내 경우에는 달리기 가 문제를 해결했습니다. 기록을 위해.
mmdemirbas

76

Maven (SpringBoot 응용 프로그램) 솔루션을 사용하고 있습니다.

  1. 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭
  2. Maven 선택
  3. 소스 생성 및 폴더 업데이트를 선택합니다.

그런 다음 Intellij는 생성 된 소스를 프로젝트로 자동으로 가져옵니다.


폴더 구조를 엉망으로 만들지 않고 작동합니다!
szab.kel

이 답변은 더 높아야합니다 – 허용 된 답변보다 훨씬 더 편리합니다
stusrob

4
IntelliJ에 2019.1의 최신 버전, 당신은 (상단에 받는다는 사이드 바 확장, 오른쪽에서 두 번째 버튼)을 받는다는 메뉴에서 두 번째 버튼을 클릭 할 수있는 공지 사항
Roeland 반 Heddegem

또한 잘못된 기본 저장소가 아닌 내 maven settings.xml을 확인해야했습니다
Jonathan

22

gradle을 사용하면 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
이 수정은 며칠 동안 나를 위해 일한 유일한 수정입니다. 감사!
user1660256

오 감사합니다. 방금 인텔 리즈를 업데이트했고 아이콘을 변경했습니다. 주황색 폴더가 출처가 아님을 의미한다고 생각하지 않았습니다.
피터 드 BIE

반나절 나는 이것을 찾고 있었다. antlr4로 나를 위해 일했습니다. 감사!
표트르 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>작업이 필요할 수 있습니다.

그러나 플러그인이 폴더를 소스 폴더로 추가하면 망가집니다.


감사합니다 Sean. 실제로 Intellij가 target / generated-sources / com과 target / generated-sources를 모두 추가하는 것을 관찰했습니다 ( "resource"섹션에서 명시 적으로 소스 디렉토리로 추가됨). 첫 번째 일이 발생하지 않도록하는 다른 방법이 있습니까? 아니요 인 경우 해결 방법을 시도해 보겠습니다.
Kannan Ekanath 2011 년

1
예, 저자는 target/generated-sources/my-tool.
Vlastimil Ovčáčík


1

몇 달 전에 프로젝트를 가져올 때 Eclipse에서 동일한 문제가 발생했습니다. 이제 intelliJ와 동일했습니다. 누군가가 IntelliJ에서이 문제를 해결하도록 도왔던 방법입니다.

메뉴 =>보기 => 도구 창 => Maven 프로젝트 spring_user 값 => 구성 실행에서 새로 설치를 선택하십시오. 이것은 새로 설치해야하며 그 후에 클래스를 볼 수 있어야합니다. 여기에 이미지 설명 입력


1

모듈 설정에서 "제외됨"을 제거하여 문제를 해결했습니다 (프로젝트, "모듈 설정 열기"를 마우스 오른쪽 버튼으로 클릭). 여기에 이미지 설명 입력


0

몇 번의 시도 후 유일한 작업 조건은 루트 프로젝트 폴더에서 숨겨진 .idea 폴더를 제거하고 Intellij에서 다시 가져 오는 것입니다.


0

DaShaun이 이전에 작성한 댓글에서 업데이트하고 싶었지만 처음으로 댓글 을 달았 기 때문에 응용 프로그램에서 나를 허용하지 않았습니다.

그럼에도 불구하고 나는 이클립스를 사용하고 있으며 Dashun이 제안한대로 아래 언급 코드 스 니펫을 내 pom.xml에 추가하고 mvn clean 패키지를 실행하여 avro 소스 파일을 생성했지만 작업 공간에서 여전히 컴파일 오류가 발생했습니다.

project_name-> maven-> update project를 마우스 오른쪽 버튼으로 클릭하고 프로젝트를 업데이트하여 target / generated-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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.