生成されたソースフォルダーでIntellijを使用できません


87

関連する質問 jaxb2-maven-pluginを使用して生成されたJavaソースコードでディレクトリを自動的に追加するようにIntelliJIDEAやMavenを構成するにはどうすればよいですか?

下にソースを生成するカスタムプラグインがありますtarget/generated-sources(ここにはツール名がないことに注意してください)。だから私はtarget/generated-sources/com/mycompany...などのようなソースを取得します。

この形式はまったく変更できないので、Intellijを構成してソースフォルダーとして追加することができます。今のところ、Intellijがtarget/generated-sources/comソースフォルダーとして追加されていることがわかります。

プラグインを設定するオプションがないことに注意してください!

更新1:生成されたソースをツール名フォルダーの下に配置する必要があるという事実に同意しません。良い慣習かもしれませんが、ジェネレーターが1つしかない場合は、そこに配置する必要はありませんか?繰り返しますが、私のpom.xmlには、ソースフォルダーとして扱う必要があるresourcesことを明確に示すセクションがありtarget/generated-sourcesます。これはEclipseで完全に正常に機能するため、Intellijが私の設定を尊重しない理由がわかりません。

TL; DR-> Intellijがクラスパスに追加することに熱心target/generated-sourcesであるpom.xml理由のリソースセクションに入れると、target/generated-sources/com



この解決策を試してください。問題が解決する場合があります。解決策については、ここをクリックしてください
Asad Abdin 2017年

この解決策を試してください。問題が解決する場合があります。解決策については、ここをクリックしてください
Asad Abdin 2017年

回答:


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
このオプションは面白そうです。「mvnidea:idea」を実行するたびにこの設定が失われます。この「回避策」でMavenアイデアプラグインを宣言する方法はありますか?
Kannan Ekanath 2011年

3
IDEAはビルドフォルダーを除外しているため、ビルド中の場合、生成されたソースフォルダーを追加することはできません。
NBW

1
@NBW手動ではできません、はい。ただし、モジュールを削除してから(このプラグインを設定して)再インポートすると、ideaはすべてを正しく認識します。
ゾルタン2015年

3
任意のフォルダを右クリックして、「ディレクトリに
名前を

5
私のpom.xmlにはこのスニペットが含まれていましたが、IDEAは生成されたソースを認識しませんでした。mvn idea:idea私の場合、実行することで問題が解決しました。記録用。
mmdemirbas 2018

83

私が使用しているMaven(SpringBootアプリケーション)ソリューションは次のとおりです。

  1. プロジェクトフォルダを右クリックします
  2. Mavenを選択します
  3. [ソースの生成とフォルダーの更新]を選択します

次に、Intellijは生成されたソースをプロジェクトに自動的にインポートします。


自分でフォルダ構造を台無しにすることなく動作します!
szab.kel 2018

この回答は、より高くする価値があります
-stusrob19年

5
Intellij 2019.1の最新バージョンでは、Mavenメニューの2番目のボタンをクリックできることに注意してください(右側で、Mavenサイドバーを展開し、上部で2番目のボタン)
Roeland VanHeddegem19年

また、デフォルトではなく間違ったリポジトリを指しているmaven settings.xmlを確認する必要がありました
Jonathan

チャームのように機能します!
marcin.programuje

22

gradleを使用すると、gradle設定を更新するたびに、プロジェクト設定がクリアされます。代わりに、build.gradleに次の行(または同様の行)を追加する必要があります。私はkotlinを使用しているので:

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

これは、IntelliJのプロジェクトインポートとの両方で機能しましたgradle idea。ありがとう!:)
クリス・クーパー

はい-利用可能な最良のヒント。ジョージは腹を立てていた!
Hoobajoob 2017年

私のために働きます。このソリューションをmapstruct、springframework、componentModel = "spring"シナリオで使用しました
dwilda 2018

16

修正

ゴーへのプロジェクト構造-モジュール-ソースフォルダと見つけるtarget/generated-sources/antlr4/com/mycompany-クリック編集プロパティをと設定パッケージの接頭辞をしますcom.mycompany

これが、ソースディレクトリにパッケージプレフィックスを設定できる理由です。


ここで異なるが関連する問題


1
この修正は、何日も見て私のために働いた唯一の修正です。ありがとう!
CNDyson 2016年

ああ、ありがとう、私はちょうどintellijを更新しました、そして彼らは彼らのアイコンを変えました。オレンジ色のフォルダがソースではないことを意味するとは思いませんでした。
Pieter De Bie 2016

半日私はこれを探していました。antlr4で私のために働いた。ありがとう!
Piotr Tempes 2017

1
ANTLR> = 4.5.3(おそらくそれ以前)の場合、私の文法がにある限りsrc/main/antlr4/<path-to-package>/、それはに表示されtarget/generated-sources/antlr4/<path-to-package>ます。IntelliJは自動的に正しいディレクトリをソースルートとしてマークし、パッケージプレフィックスは必要ありませんでした。この修正は、人々が文法を直接に配置するときに必要になると思いsrc/main/antlr4ます。これは、何らかの理由で推奨されることがよくあります。
AlexReinking19年

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がtarget / generate-sources / comとtarget / generate-sourcesの両方を追加することを実際に観察しました(これは「resource」セクションに明示的にソースディレクトリとして追加されます)。最初のことが起こらないようにする他の方法はありますか?いいえの場合、回避策を試してみます。
Kannan Ekanath 2011年

1
はい、作者はを使用する必要がありますtarget/generated-sources/my-tool
VlastimilOvčáčík


1

数か月前にプロジェクトをインポートしたときに、Eclipseで同じ問題が発生しました。今、私はintelliJでも同じことをしました。IntelliJでこれを解決するために誰かが私を助けてくれた方法は次のとおりです。

メニュー=>表示=>ツールウィンドウ=> Mavenプロジェクトspring_user値=>構成の実行で、クリーンインストールを選択します。これでクリーンインストールが実行され、この後、クラスが表示されるはずです。 ここに画像の説明を入力してください


1

モジュール設定の「除外」を削除して解決しました(プロジェクトを右クリックし、「モジュール設定を開く」)。 ここに画像の説明を入力してください


0

数回試行した後の唯一の動作条件は、ルートプロジェクトフォルダーから非表示の.ideaフォルダーを削除し、Intellijから再インポートすることでした。


0

以前DaShaunが行ったコメントで更新したかったのですが、初めてのコメントであるため、アプリケーションで許可されませんでした。

それにもかかわらず、私はeclipseを使用しており、Dashunによって提案されたようにpom.xmlに以下のコードスニペットを追加し、mvn cleanパッケージを実行してavroソースファイルを生成した後、ワークスペースでコンパイルエラーが発生していました。

project_name-> maven-> update projectを右クリックしてプロジェクトを更新しました。これにより、ターゲット/生成されたソースがソースフォルダーとしてEclipseプロジェクトに追加されました。

<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 generate-resourcesを実行し、/ target / generated-resourcesフォルダーを「ソース」としてマークしました(プロジェクト構造->プロジェクト設定->モジュール-> / target / generated-resourcesを選択->青い「ソース」アイコンをクリックします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.