4

Java と Groovy の両方のクラスで構成される IntelliJ IDEA のプロジェクトがあります。これらのクラスは、ソース フォルダーとしてマークした "groovy" フォルダーと "java" フォルダーに含まれています。「groovy」ソース フォルダーからクラスをインポートする Java クラスが多数ありますが、それらを実行しようとすると、常に「java: package foo does not exist」というエラーが発生します。パッケージ「foo」は「groovy」フォルダーの直下にあるので、これは機能するはずです。以下にビジュアルを含めました。(特定の詳細は避けようとしています。極秘のエリア 51 プロジェクトに取り組んでいる場合もあれば、そうでない場合もあります。)

構造ビジュアル:

project-folder
|
-src
 |
 -main
  |
  -groovy (marked as source)
  ||
  |-foo
  | |
  | -bar.groovy
  -java (marked as source)
   |
   - java class that imports "foo.bar"

エラー: java: パッケージ foo が存在しません

動作しないもの:

  • すべてを「フレームワーク」の下に置き、「groovy」フォルダーの直下に配置します。「シンボル バーを解決できません」という結果になる

  • プロジェクトの未完成化と再構築

4

3 に答える 3

5

プロジェクトを「unmavenize」する必要はありません。(ただし、そのように提案するトラブルシューティングの理由は理解しています。) 問題はキャッシュまたはインデックスの破損であると思われます。[ファイル] > [キャッシュの無効化]に移動します。選択してキャッシュを無効にし、IDEA を再起動します。IDEA にプロジェクトのインデックスを再作成させます。物事はうまくいくはずです。そうでない場合は、1) IDEA の最新バージョン (12.1.5) を使用していること、および 2) Groovy プラグインの最新バージョン ( [ファイル] > [設定] > [IDE 設定] > [プラグイン] ) を確認してください。

Maven を使用する場合は、「groovy」ディレクトリを POM の追加のソース ディレクトリとして識別する必要があります。そうしないと、IDEA がプロジェクトを再インポートする (つまり、POM に再同期する) ときに、groovyデフォルトで maven がソースと見なさないため、ディレクトリがソースとして削除されます。これを行う方法は、使用するプラグインによって異なります。GMavenはメンテナンスされなくなったため、groovy-eclipse-compilerプラグインを使用しています。そのプラグインを使用する場合、プラグインはsrc/main/groovyソースとして自動的にインクルードします (ただし、少なくとも 1 つの Java または groovy ファイルが に含まれている必要がありますsrc/main/java)。ただし、IDEA はそのディレクトリを取得せず、ソースとしても含めます。つまり、手動で (または IDEA が自動的に) Maven の再インポートを実行すると、src/main/groovyディレクトリはソースとしてマークされなくなり、IDEA はコンパイル エラーを表示します。追加のディレクトリを指定する必要があります。groovy-eclipse-compiler のドキュメントで推奨されているように、build-helper-maven-plugin を使用してこれを行うことができます。

動作中の Java/Groovy プロジェクトの POM の要点は次のとおりです。

<properties>
    <groovy.version>2.1.5</groovy.version>
    <groovy-eclipse-compiler.version>2.8.0-01</groovy-eclipse-compiler.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <compilerId>groovy-eclipse-compiler</compilerId>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy-eclipse-compiler</artifactId>
                    <version>${groovy-eclipse-compiler.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy-eclipse-batch</artifactId>
                    <version>2.1.5-03</version>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>add-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/groovy</source>
                        </sources>
                    </configuration>
                </execution>
                <execution>
                    <id>add-test-source</id>
                    <phase>generate-test-sources</phase>
                    <goals>
                        <goal>add-test-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/test/groovy</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>${groovy.version}</version>
    </dependency>
</dependencies>
于 2013-10-07T21:36:51.697 に答える