私は私のビルドしようとしたとき、私は奇妙な問題に実行しているプロジェクトを Gradleの経由。
私はIDEを経由してのIntelliJとビルド/実行テストにプロジェクトをインポートするときに、ビルドが正常に動作します。私が実行している場合しかし、./gradlew test
ビルドが失敗し、それがJDK(等において解決シンボルにできますGenericArrayType
)。
私はGradleのへのIntelliJのビルド/実行するアクションを委任する場合は、何かが私のGradleのビルドで、最大のようですので、私は、同様に私のIDEで同じ問題を見て、私は何を把握することはできません。この特定のプロジェクトに問題があるようですので、他のプロジェクトには、罰金を働いています。
私は別のマシン(Ubuntuと他の実行中のMacOSを実行している1)ならびに異なるGradleのバージョン(でこれを試してみましたが4.10.2
、5.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);
^
解決
@ 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コンパイラが正しく次のシナリオ(唯一のラフではなく、コンパイラが何をするかの非常に技術的な説明)での輸入を解決できませんでした。
- 処理するときに
com.vinaysshenoy.types.util.Util
、コンパイラは、静的インポートを見つけcom.vinaysshenoy.types.Types.arrayOf
、そうでコンパイラのルックスcom.vinaysshenoy.types.Types
クラス。 com.vinaysshenoy.types.Types
静的インポートを持っているcom.vinaysshenoy.types.util.Util.GenericArrayTypeImpl
ので、入れ子になった時、コンパイラのルックスGenericArrayTypeImpl
クラス。com.vinaysshenoy.types.util.Util.GenericArrayTypeImpl
用途は(java.lang.reflect.
)GenericArrayType
、しかし、そのタイプのインポートは、まだこの時点では処理されなかった「シンボルを見つけることができません」というエラーにいるリード。
おそらく、また、これはいくつかのコンパイラではなく、他の人と働くことをJDKのバグであることを考えることができます。