GradleのでJavaライブラリをコンパイルすることはできません、IDEで動作します

ビナイSシェノイ:

私は私のビルドしようとしたとき、私は奇妙な問題に実行しているプロジェクトを Gradleの経由。

私はIDEを経由してのIntelliJとビルド/実行テストにプロジェクトをインポートするときに、ビルドが正常に動作します。私が実行している場合しかし、./gradlew testビルドが失敗し、それがJDK(等において解決シンボルにできますGenericArrayType)。

私はGradleのへのIntelliJのビルド/実行するアクションを委任する場合は、何かが私のGradleのビルドで、最大のようですので、私は、同様に私のIDEで同じ問題を見て、私は何を把握することはできません。この特定のプロジェクトに問題があるようですので、他のプロジェクトには、罰金を働いています。

私は別のマシン(Ubuntuと他の実行中のMacOSを実行している1)ならびに異なるGradleのバージョン(でこれを試してみましたが4.10.25.1.1)が、問題が持続します。私はコピーして、すでに完全に正常に動作し、他のプロジェクトへのソースコードを貼り付け、と私はユニットテストを実行したとき、それは、同様に同じエラーで失敗し始めました。

誰かの助けが私は間違ってここに何が起こっているかを把握することはできますか?

ここに私のものだsettings.gradleルックスが好き:

rootProject.name = 'types'

そして、build.gradle

group 'com.vinaysshenoy'
version '1.0.0'

buildscript {
  ext.junit_version = '4.12'
  ext.assertj_version = '3.11.1'
  ext.jsr305_version = '3.0.2'

  repositories {
    mavenCentral()
  }
}

apply plugin: 'java-library'

java {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

repositories {
  mavenCentral()
}

dependencies {
  implementation "com.google.code.findbugs:jsr305:$jsr305_version"
  testImplementation "junit:junit:$junit_version"
  testImplementation "org.assertj:assertj-core:$assertj_version"
}

ここで私は、コマンドラインを介してそれを実行したときに、私が見たものです。

      public static final class GenericArrayTypeImpl implements GenericArrayType {
                                                                ^
      symbol:   class GenericArrayType
      location: class Util
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:230: error: cannot find symbol
      public static final class ParameterizedTypeImpl implements ParameterizedType {
                                                                 ^
      symbol:   class ParameterizedType
      location: class Util
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:340: error: cannot find symbol
      public static final class WildcardTypeImpl implements WildcardType {
                                                            ^
      symbol:   class WildcardType
      location: class Util
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:54: error: incompatible types: ParameterizedTypeImpl cannot be converted to ParameterizedType
        return new ParameterizedTypeImpl(null, rawType, typeArguments);
               ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:63: error: incompatible types: ParameterizedTypeImpl cannot be converted to ParameterizedType
        return new ParameterizedTypeImpl(ownerType, rawType, typeArguments);
               ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:68: error: incompatible types: GenericArrayTypeImpl cannot be converted to GenericArrayType
        return new GenericArrayTypeImpl(componentType);
               ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:78: error: incompatible types: WildcardTypeImpl cannot be converted to WildcardType
        return new WildcardTypeImpl(new Type[] { bound }, EMPTY_TYPE_ARRAY);
               ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:86: error: incompatible types: WildcardTypeImpl cannot be converted to WildcardType
        return new WildcardTypeImpl(new Type[] { Object.class }, new Type[] { bound });
               ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:153: error: incompatible types: ParameterizedType cannot be converted to ParameterizedTypeImpl
          Type[] aTypeArguments = pa instanceof ParameterizedTypeImpl
                                  ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:154: error: incompatible types: ParameterizedType cannot be converted to ParameterizedTypeImpl
              ? ((ParameterizedTypeImpl) pa).typeArguments
                                         ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:156: error: incompatible types: ParameterizedType cannot be converted to ParameterizedTypeImpl
          Type[] bTypeArguments = pb instanceof ParameterizedTypeImpl
                                  ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/Types.java:157: error: incompatible types: ParameterizedType cannot be converted to ParameterizedTypeImpl
              ? ((ParameterizedTypeImpl) pb).typeArguments
                                         ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:52: error: incompatible types: bad type in conditional expression
          return c.isArray() ? new GenericArrayTypeImpl(canonicalize(c.getComponentType())) : c;
                               ^
        GenericArrayTypeImpl cannot be converted to Type
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:55: error: incompatible types: Type cannot be converted to ParameterizedTypeImpl
          if (type instanceof ParameterizedTypeImpl) { return type; }
              ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:57: error: incompatible types: ParameterizedTypeImpl cannot be converted to Type
          return new ParameterizedTypeImpl(p.getOwnerType(),
                 ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:61: error: incompatible types: Type cannot be converted to GenericArrayTypeImpl
          if (type instanceof GenericArrayTypeImpl) { return type; }
              ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:63: error: incompatible types: GenericArrayTypeImpl cannot be converted to Type
          return new GenericArrayTypeImpl(g.getGenericComponentType());
                 ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:66: error: incompatible types: Type cannot be converted to WildcardTypeImpl
          if (type instanceof WildcardTypeImpl) { return type; }
              ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:68: error: incompatible types: WildcardTypeImpl cannot be converted to Type
          return new WildcardTypeImpl(w.getUpperBounds(), w.getLowerBounds());
                 ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:118: error: incompatible types: bad type in conditional expression
                ? new ParameterizedTypeImpl(newOwnerType, original.getRawType(), args)
                  ^
        ParameterizedTypeImpl cannot be converted to Type
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:260: error: method does not override or implement a method from a supertype
        @Override
        ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:265: error: method does not override or implement a method from a supertype
        @Override
        ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:270: error: method does not override or implement a method from a supertype
        @Override
        ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:279: error: incompatible types: ParameterizedTypeImpl cannot be converted to Type
              && Types.equals(this, (ParameterizedType) other);
                              ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:313: error: method does not override or implement a method from a supertype
        @Override
        ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:321: error: incompatible types: GenericArrayTypeImpl cannot be converted to Type
              && Types.equals(this, (GenericArrayType) o);
                              ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:363: error: method does not override or implement a method from a supertype
        @Override
        ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:368: error: method does not override or implement a method from a supertype
        @Override
        ^
    /Users/vinay/Dev/IdeaProjects/types/src/main/java/com/vinaysshenoy/types/util/Util.java:376: error: incompatible types: WildcardTypeImpl cannot be converted to Type
              && Types.equals(this, (WildcardType) other);
                          ^
Chriki:

解決

@ Zgurskyiの答えは、しかし、私は(下記参照)、それが唯一の実際の問題の症状を治すと信じて、良いの回避策です。ここでは根本的な問題を解決するために別の、私見クリーナーの方法です:のネストされた種類の輸入作るcom.vinaysshenoy.types.util.Utilからcom.vinaysshenoy.types.Types 非staticを

diff --git a/src/main/java/com/vinaysshenoy/types/Types.java b/src/main/java/com/vinaysshenoy/types/Types.java
index e3a44d8..92ac237 100644
--- a/src/main/java/com/vinaysshenoy/types/Types.java
+++ b/src/main/java/com/vinaysshenoy/types/Types.java
@@ -17,9 +17,9 @@ package com.vinaysshenoy.types;


 import static com.vinaysshenoy.types.util.Util.EMPTY_TYPE_ARRAY;
-import static com.vinaysshenoy.types.util.Util.GenericArrayTypeImpl;
-import static com.vinaysshenoy.types.util.Util.ParameterizedTypeImpl;
-import static com.vinaysshenoy.types.util.Util.WildcardTypeImpl;
+import com.vinaysshenoy.types.util.Util.GenericArrayTypeImpl;
+import com.vinaysshenoy.types.util.Util.ParameterizedTypeImpl;
+import com.vinaysshenoy.types.util.Util.WildcardTypeImpl;
 import static com.vinaysshenoy.types.util.Util.getGenericSupertype;
 import static com.vinaysshenoy.types.util.Util.resolve;

(ところで、他の@Zgurskyi私はまた、手動でこれを再現することができるよりもjavac呼び出し、私は唯一のJDKがインストールされている;多分@ Zgurskyiのjavacコマンドラインでは、Gradleのが使用するのと同じJDKからではありません。)

実際の問題

あなたは静的にネストされたクラス(だけでなく、クラスのインポートメンバーをこれが必要になることはありませんが、)。私は実際に、これは通常の作業に思えることを驚いているが、特定の状況下で、その上に少なくともチョークで明らかにいくつかのJavaコンパイラ。

あなたのケースでは、Gradleのが使用するJavaコンパイラが正しく次のシナリオ(唯一のラフではなく、コンパイラが何をするかの非常に技術的な説明)での輸入を解決できませんでした。

  1. 処理するときにcom.vinaysshenoy.types.util.Util、コンパイラは、静的インポートを見つけcom.vinaysshenoy.types.Types.arrayOf、そうでコンパイラのルックスcom.vinaysshenoy.types.Typesクラス。
  2. com.vinaysshenoy.types.Types静的インポートを持っているcom.vinaysshenoy.types.util.Util.GenericArrayTypeImplので、入れ子になった時、コンパイラのルックスGenericArrayTypeImplクラス。
  3. com.vinaysshenoy.types.util.Util.GenericArrayTypeImpl用途は(java.lang.reflect.GenericArrayType、しかし、そのタイプのインポートは、まだこの時点では処理されなかった「シンボルを見つけることができません」というエラーにいるリード。

おそらく、また、これはいくつかのコンパイラではなく、他の人と働くことをJDKのバグであることを考えることができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=173761&siteId=1