web-dev-qa-db-ja.com

default-packageのJavaクラスにアクセスする方法は?

私は現在、他の人たちと一緒にgrailsプロジェクトで働いています。 Javaクラスをいくつか作成する必要があります。しかし、groovyで作成された検索可能なオブジェクトにアクセスする必要があります。このオブジェクトはdefault-packageに配置する必要があるようです。

私の質問:名前付きパッケージのJavaクラスからdefault-packageのこのオブジェクトにアクセスする方法はありますか?

93
Mnementh

実際、できます。

リフレクションAPIを使用すると、これまでのどのクラスにもアクセスできます。少なくとも私はできました:)

Class fooClass = Class.forName("FooBar");
Method fooMethod = fooClass.getMethod("fooMethod", String.class);

String fooReturned = (String)fooMethod.invoke(fooClass.newInstance(), "I did it");
59

jarjar を使用して、次のルールでjarファイルを再パッケージ化します。

rule * <target package name>.@1

ソースjarファイルのデフォルトパッケージ内のすべてのクラスはターゲットパッケージに移動するため、アクセスできます。

7
Sean

Groovyコードでパッケージを使用できますが、問題なく動作します。

それはgrails-appの下でのコードの小さな再編成と最初は少し苦痛を意味するかもしれませんが、大規模なgrailsプロジェクトでは、パッケージで物事を整理するのが理にかなっています。 Java標準パッケージ命名規則com.foo.<app>.<package>を使用します。

あなたが見つけているように、すべてをデフォルトのパッケージに入れると、統合の妨げになります。

コントローラーは、Javaパッケージに入れられないようにするGrailsアーティファクト(またはアーティファクト)のようです。おそらく、そのためのConventionをまだ理解していません。 )

3
Ken Gentle