問題タブ [groovyclassloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4476 参照

java - クラスパスに存在しないクラスのロード

ファイル システムに 1 つ以上の .class ファイルを生成した Groovyc を使用して Groovy スクリプトをコンパイルしたとします。Java アプリケーションから、これらのクラスをクラスパスに動的に追加して、クラスをロードしてメソッドを呼び出すにはどうすればよいですか? 目標は、Groovy スクリプトをプリコンパイルしてデータベースに保存することです。これにより、スクリプトのコンパイル済みバージョンから評価を実行できます。

0 投票する
4 に答える
3691 参照

grails - Groovy 動的に呼び出されたクラスと find メソッドが機能しませんか?

次のような動的クエリを作成しようとしています。

しかし、それは機能していません。

私がこれを試している場合、すべて問題ありません:

検索で動的ドメイン クラス名を使用するにはどうすればよいですか?

0 投票する
1 に答える
1296 参照

groovy - GroovyClassLoader を使用してクラスのメソッドを動的に変更または追加できない

Groovy スクリプトで定義されたクラスのメソッドを別の Groovy スクリプトから動的に変更および追加しようとしましたが、クラス名を .metaClass で直接使用するとなぜ機能するのかわかりません。ただし、GroovyClassLoader を使用してクラスをロードする場合はそうではありません (これを行う必要があります!)。

1つのファイル「MyTest.groovy」に

および別のファイル「suite.groovy」が含まれています

最初の方法では、期待される結果が得られます。

しかし、私が得る2番目のもので

興味深いことに、既存のメソッドを変更しても機能しませんが、例外はありませんが、新しいメソッドを追加しようとするとスローされます。使用されているクラスローダーで何かをしなければならないと思いますが、何を正確に何を変更すればよいのかわかりません! 最初のバージョンでは、次のクラス ローダーが呼び出されます。

2 番目のバージョンの場合:

どんなアイデアでも大歓迎!
フランク

0 投票する
1 に答える
1283 参照

eclipse - Grails 1.4.0.M1(STS 2.7.0.M2を使用)GantBuilderのNoClassDefFoundError

アップグレードしたばかりです...

  • Grails 1.4.0.M1
  • Groovy 1.8.0
  • STSバージョン:2.7.0.M2ビルドID:201106101000-Mac用64ビットCocoaバージョン
  • 私はOSX10.5.8を持っています。JVM1.5.0を使用

既存のプロジェクトで「create-app」や「upgrade」などのgrailsコマンドを実行すると、GantBuilderに対して次のNoClassDefFoundErrorが発生します。(完全なトレースについては、以下を参照してください)

このフォーラムから提案された同様の問題の解決策は、gant_groovy1.8-1.9.5.jarが欠落していることです。これをプロジェクトに直接追加し、groovy / libフォルダーにも追加しました(STS->設定->Groovy->コンパイラー->すべてのGroovyクラスパスコンテナーを更新します)が、それでもエラーが発生します。(gant_groovy1.8-1.9.5.jarをgroovy / libに追加したとき、それは別のgroovyダウンロードでしたが、STSが内部grailsシェルコマンドに使用するgroovy / libフォルダーや、STSgroovyの表示方法がわかりません。クラスパス)

誰かアイデアはありますか?

0 投票する
1 に答える
1520 参照

java - Beanshell では、「デフォルト」の JRE クラスローダーに jar を追加できませんか?

どこにも答えが見つからないBeanshellに関する質問があります。Beanshell スクリプトを実行できるのは、次の 2 つの方法のうちの 1 つだけです。

  1. クラスパスは Beanshell を呼び出す前に定義され、Beanshell は JRE のデフォルト クラスローダーを使用します。

  2. Beanshell を起動する前にクラスパスがまったく定義されていない場合、and を使用 addClassPath()importCommands()て Beanshell のクラスローダー内でクラスパスを動的に構築します。このメソッドは、デフォルトの JRE クラスローダーの一部であった jar を継承していないようです。

多くの実験の後、事前定義されたクラスパスを使用してスクリプトを開始できず、を使用してクラスパスに追加できないことがわかりましたaddClassPath()これが設計どおりなのか、それとも何か間違っているのかわかりません。

私の問題が何であるかを自分で確認するのは非常に簡単です。たとえば、スクリプトは次のとおりです。

2 番目の呼び出しでは、次のエラーが発生します。

Test.bat は、次の Beanshell スクリプトを起動します。

そして、これは私の helloWorld.bsh スクリプトです。

0 投票する
1 に答える
236 参照

groovy - loadClass() メソッドの lookupScriptFiles "true"

GroovyClassloader の拡張と loadclass メソッドのオーバーライド

lookupScriptFilesメソッドで" true"を作成loadClass()すると、スクリプトが実行され、別のパッケージの Groovy クラスを参照する import ステートメントは必要ありません。

GroovyClassloader を拡張し、loadclass メソッドをオーバーライドし、loadclass で引数lookupScriptFiles =true

これが真の場合、最初でも正常にコンパイルされます。groovy には import ステートメントがありません

lookupScriptFiles=false期待どおりにコンパイルエラーがスローされる場合。

0 投票する
1 に答える
425 参照

groovy - GroovyClassloader の動作

GroovyClassloader の動作理解、

ループで、

上記のコードに関していくつか質問があります。

  1. for ループで、新しい groovyclassloder オブジェクトを作成し、groovy スクリプトを 2 回解析しています。ループが 2 度目に繰り返され、groovyscript を再度解析しようとすると、どうなりますか?
  2. 別のオブジェクトが作成されたときに 2 回目に何が起こるか。クラスローダは、クラスパスからクラスを取得するか、再度再コンパイルしますか?
  3. 再コンパイルがトリガーされると、groovy はソースが変更されたことをどのように認識しますか?