問題タブ [janino]
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 - 動的Javaコンパイル:BeanShell、Janino、JavaCompiler?
小さなJavaデスクトップアプリの開発を始めようとしています。このアプリは、ユーザーが作業(入力から出力への変換)を行うためのJavaクラスを提供するための単なるエンジンです。
その場でロード(およびリロード)できるファイルとして実際のJavaクラスを提供してほしい。
この特定の用途では、JavaがGroovyやBeanshellよりも扱いにくい理由はありますか?Groovy / BeanshellとJavaの比較はたくさんあるので、私は求めていません。むしろ、 Javaと比較してファイルからGroovyまたはBeanshellクラスを動的にロードする方が簡単かどうかを知りたいです。
Java 1.6の場合、JavaCompilerはコードを動的にロードするための最良の方法ですか?私はすべての言語機能を使いたいので、Janinoは出ていると思います。また、リロードに問題はありますか?
java - Janinoコンパイラにjarと同じディレクトリ内のファイルをコンパイルさせることができません
Janinoを使用して、実行時にJavaファイルをコンパイルしてプログラムで使用しています。私はnetbeansを使用していますが、ディレクトリをsrcフォルダーに置いた場合にのみ、実行時にコンパイルすることができます。相対パスを使用してコンパイルしようとすると、機能しません。
私はhttp://docs.codehaus.org/display/JANINO/Advanced#Advanced-compilerの例に従っています
実行時にコンパイルするファイルをsrcディレクトリのscriptsというフォルダに置くと次のようになります。
スクリプトフォルダをjarと同じディレクトリに置くと機能しません。srcディレクトリのscriptsフォルダを使用してIDE内からプロジェクトを実行した場合にのみ、プロジェクトを機能させることができます。
jarファイルと同じフォルダーにあるscriptsフォルダーを使用してプロジェクトを実行しようとすると、
AbstractEngine engine = (AbstractEngine) cl.loadClass(engineClass).newInstance();
行にClassNotFoundExceptionが発生します。
spring - 統合テスト用の別のログファイル
TomcatでホストされているWebアプリケーションにSL4jとLogbackを使用しています。私はSpringとMavenを使用しています(プロファイルなし)。統合テストは、Surefireプラグインを使用して行われます。
ログバック構成内に、ファイルベースのアペンダーがあります。
統合テストとWebアプリケーションのログファイルは偶然に分離されています。統合テストの場合はプロジェクトのルートであり、Webアプリケーションの場合はEclipseディレクトリでした。そこで、logbackconfig内にログファイルの場所を導入しました。
今の作品とのif
組み合わせでisDefined
、クラスパスでジャニーノを忘れてしまいました(チェキのおかげで)。統合テストのログ出力とWebアプリケーションのログ出力の両方が同じログファイルに記録されます。だから私の質問:
統合テストWebアプリケーションのログファイルをどのように分離できますか?このリンクを見つけましたが、構成のみのソリューションをお勧めします。私は本当にMavenプロパティを挿入したいと思います。
更新 私の問題は解決しました。まず、ログバック構成:
アペンダーファイルのプロパティは次のようになります。
このソリューションでは、2つのことが奇妙です。
- logbackは、プロパティが空の場合、プロパティは未定義であると見なします。そのため、 (空の文字列)
"./"
の代わりに使用する必要がありました。""
isDefined("catalina.home")
Tomcatで起動した場合にのみ結果が得true
られます(OSはWindowsです)。とにかく「catalina.home」が定義されている理由がわかりません。「CATALINA_HOME」という環境変数がありますが、TomCatが開始時に「catalina.home」を設定していることがわかります。
私はまだMaven変数をログバック構成(プロジェクトルート)に挿入したいのですが、上記の解決策を実行する必要があるのではないかと心配しています。
logback - 条件機能は Logback でどのように機能しますか?
この logback 構成ファイルを使用します。
アプリケーションを実行すると、次のエラーが発生します。
なぜ方法が不明なのisDefined
ですか?logback docsには、存在するはずであると記載されており、少なくとも1 つのスタック オーバーフロースレッドがそれを使用しているようです。
式の評価に必要なため、最新バージョンの janino をクラスパスに含めました。エラー メッセージでわかるように、janino コンパイラが読み込まれます。
java - NoSuchMethodError
Webでも同様の問題が見つかりましたが、投稿された解決策はどれも機能していないようです。
ビルドには18分かかるため、テストのために常にtomcatでビルドして実行するのではなく、JettyでWebアプリケーションを実行しようとしています。:(
これはdroolsプロジェクトであり、私はEclipseIndigoSR2で実行しています。Jetty6.1.26とSpringFramework2.5.6で実行しようとしています。
https://community.jboss.org/wiki/RulesTomcatのvmargsセクションに次のシステムパラメーターを使用してデバッグ設定を作成しました。
-Djava.naming.factory.initial = org.mortbay.naming.InitialContextFactory -Ddrools.compiler = JANINO
これが私が得ている多くの同様のエラーの1つです:
java - 実行時に文字列表現からJavaオブジェクトを作成する方法
たとえば、文字列がある"{1,2,3,4,5}"
場合、その文字列からint[]オブジェクトを取得したいと思います。
JaninoとBeanshellを少し調べましたが、これを実行するための正しい方法が見つからないようです。
整数配列だけでなく、すべてのタイプで機能する汎用ソリューションを探しています。
java - Janino ExpressionEvaluator がすべてのパラメータを推測していませんか?
ExpressionEvaluator
ライブラリのクラスの単純な使用例を考えてみましょうJanino
。つまり、次のように式のパラメータを推測するために使用する場合です。
上記は、私が使用した任意のタイプの式(非常にあいまいなものを含む)で非常にうまく機能しますが(100%)、パラメーターのいずれかが大文字で始まる場合は省略されます.
たとえば、式
aVar
上記のメソッドに渡された場合、1 つのパラメーター ( ) のみが生成されますが、他のパラメーター ( Another
) は無視されます。
この動作の説明はありますか (たとえば、大文字で始まる変数はクラス名と見なされます)?
最も重要なことは、説明されている動作を何らかの方法でバイパスできるか (たとえば、何らかの構成オプションを介して) ことです。
アップデート
どうやら制限はより一般的で、大文字で始まるすべてのパラメーターに影響します。これは、 JANINO-151で説明され、関連するディスカッションで言及されているように、Janinoの既知の制限 (または機能)です。
実際、 Janino ExpressionEvaluator クラスguessParameterNames()
のメソッドのソース コードはこれを裏付けています。
logback - ログバック:「クラスパスにJaninoライブラリが見つかりませんでした」
エラーメッセージが表示Could not find Janino library on the class path. Skipping conditional processing.
されますこれを修正するには、クラスパスに何を含める必要がありますか(libとversion)?