問題タブ [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.
java - 実行時に作成された外部 groovy クラスに Spring サービスを注入する
Spring を利用したアプリがあり、groovy を統合したいと考えています。具体的には、一連の抽象メソッド定義を持つ 1 つの抽象 Java クラスと、autowired で注入された 1 つのリポジトリがあります。
このクラスは、いくつかの最終的な groovy 外部クラス (クライアントごとに 1 つ) によって実装する必要があります。
現時点では、Java で Groovy クラスを次のように呼び出しています。
問題は、各 Groovy 外部クラスでリポジトリ変数を自動配線する必要があるが、現在は null であることです。
実行時に作成するときに、inyected リポジトリ変数を取得するように Groovy クラスに通知するにはどうすればよいですか?
ありがとう!
編集
Y は、このように groovyObjectObject の setProperty メソッドを使用して解決しました。
groovy - GroovyClassLoader とインポート
Java クラスで GroovyClassLoader を使用して、特定の (理想的には複雑な) groovy ファイルを解析しています (次のステップで実行します)。
MyClass.java で呼び出す
知っています:
- Groovy ファイルは、再デプロイせずに変更する必要があるため、ファイル システムに格納する必要があります。
- この groovy ファイルには、いくつかのインポートが必要です。
GroovyFile.groovy インポート
parseClassメソッドが呼び出されると、次の例外が発生します。
例外
基本クラスを解析する前にすべてのインポート クラスを解析しなくても、期待どおりの動作を得ることができますか?
ありがとう!
groovy - クラスローダーにロードされたクラスでオブジェクトをキャストする方法
私はスタックオーバーフローが初めてです。スクリプトに必要なすべてのクラスをロードした Groovy クラス ローダーのオブジェクトを作成しました。クラスローダーにロードされたクラスの1つで作成されたオブジェクトをシリアライズおよびデシリアライズするタスクがあります。問題は、デシリアライズ中に、クラス ローダーにロードされたクラスとしてクラス内のオブジェクトをキャストできないことです。クラスローダーにロードされたクラスでオブジェクトをキャストする方法がわかりません。誰かがこれで私を助けることができますか???????? 以下のスニペットは、クラスローダーにロードされるクラスですが、どうすればこれを達成できますか?
前もって感謝します!!!
java - IntegerMetaClass を GroovyShell に動的に追加する
特定のコンテキストIntegerMetaClass
でのみカスタムを使用したいと思います。GroovyShell
その理由は、ランタイム全体を私の潜在的な 'disturbing' で汚染しないためIntegerMetaClass
です。
魔法のパッケージに IntegerMetaClass.java の実装を入れると、魔法のように機能しますgroovy.runtime.metaclass.java.lang
。しかし、中間の GroovyClassLoader に手動で追加しようとすると、機能しなくなります。
GroovyClassLoader
MetaClass を「解析」するだけでなく、やらなければならないことがありませんか? どこか他の ?
アップデート1:
上記のようIntegerMetaClass.minutes
に、Java ソースのクラスパスに直接配置すると、ルックアップが機能します。
更新 2:
可能ではあるが満足のいく解決策:
gcl.parseClass
呼び出しの直後に以下を追加
ただし、このソリューションでは、MetaClass ソースと元のターゲット クラスの間で一種の「マッピング」を維持して、より多くの機能をサポートする必要がありInteger
ます。
groovy - 動的にロードされた groovy ファイル内で import を使用する方法
ソースファイルを動的にロードすることで、ユーザーがプラグインをメインの Groovy アプリケーションに提供する方法を考え出そうとしています。しかし、彼らのグルーヴィーなファイルには import ステートメントが含まれており、明らかに適切なクラスパスでもそれらを機能させる方法がわかりません。
主なアプリケーションは、シェル スクリプト bin/top.sh です。
lib/Top.groovy クラス:
ユーザークラス UserPlugin.groovy:
そして lib/Lib.groovy:
で実行するとbin/top.sh
、次のようになります。UserPlugin.groovy: 3: unable to resolve class Lib
lib
そのようにクラスローダーに追加すると、loader.addClasspath('lib')
かなり壊滅的です:
すべてをスクリプト化してコンパイルせずに維持しながら、これをどのように機能させることができますか? これは可能ですか?
groovy - Groovy が CloudHub でクラスを解決できない
CloudHub でアプリケーションを実行すると、Mule フローの次のスクリプトで次のエラーが発生します。Anypoint studio で実行すると、問題はありません。
デプロイされたアプリケーション アーカイブ ファイルを確認すると、classes フォルダーにコンパイル済みの company.cloudtools.util.Utilities クラスがあります。CloudHub サーバーがエラーで定義されたクラス ファイルを見つけられない理由がわかりません。
エラー:
Mule フローのスクリプト:
ユーティリティ クラス:
groovy - ファイルシステムからではなくGroovyソースをコンパイルする方法
GroovyClassLoader.parseClass(src) を使用して単一の Groovy ソース モジュールを「その場で」コンパイルしましたが、すべて問題ありません。
しかし問題は、このソース モジュールが他のクラスをインポートするときに、これらがまだコンパイルされていないことです。1 つのソースのコンパイルを開始すると、従来のコンパイルが必要になり、ソース パス上で準備ができている他のソースもコンパイルされます。
GroovyClassLoader をターゲットで使用して、他のすべての必要なソースを FILESYSYSTEM からではなくコンパイルするにはどうすればよいですか。私のソースは、たとえばデータベース、URI 経由のリモート http などにあります。
java - Java プロジェクトで groovy スクリプトを実行すると、演算子「>」が「>」に変換されるのはなぜですか?
これは私のグルーヴィーなスクリプトです:
これは、クラス"SingleDiseaseAction"
メソッドでスクリプトを実行するための私の Java コード"testConfig()"
です。
上記のコードでは、私の groovy スクリプトはコードで取得できます"hsdqTargetConfig.getTarget_compute()"
。
この"initScript"
メソッドは、いくつかのユーティリティ クラスをインポートするためのものです。
これを読んでくれてありがとう。私の悪い英語でごめんなさい。
エラーレポートは次のとおりです。
私のグルービージャーは"groovy-all-2.1.6.jar"
.
Groovyの構文を確認しました。Groovy は">"
オペレーターをサポートする必要があります。
しかし、なぜそれがエラーなのかはわかりません。からへ
の変換操作のためですか?もしそうなら、私はこの問題に対して何ができますか?">"
">"