問題タブ [java-compiler-api]
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 - カスタムClassLoaderおよびFileManagerを備えたJavaCompiler
マシンに依存関係がない状態でソースをコンパイルしたい。
例:ファイルA.java:
Bソースが存在しないので、問題のシンボル(パッケージ'some.package'とクラスB)を取得するために、JavaFileManagerまたはカスタムClassLoaderのいずれかをフックして、ソースを取得するサービスを使用したいと思います。ストリング。
コンパイルコード:(inputFilesにはA.javaがあります)
JavaFileManager(getFileForInput ..)およびクラスローダー(findClass、loadClass ..)のフックは、コンパイル時にトリガーされず、エラーメッセージが表示されました。
編集
APIをいじって、JavaCompiler(古いバージョン)のソースを調べ、コンパイルの概要を読んだ後でも、構文ツリーからシンボルを提供するために使用できるAPIフックが見つかりません。kschneidによって提案されているように、APIはパッケージ名に基づいてすべてのリソースを取得する必要があるようです。
私が考えた回避策の1つは、JavaCompilerを実行し、欠落しているシンボルのエラーメッセージを分析することです。そうすれば、どのシンボルが必要かを知り、それらを取得して再コンパイルします。
他の回避策/解決策はありますか?
java - JavaCompiler を使用して他のクラスで参照されているデフォルトのパッケージ クラスをコンパイルできない
クラスを動的にコンパイルする必要がある状況があります。
以下は、私のJavaクラスが編成された構造です。
ここで、A はデフォルト パッケージのクラス、B はパッケージ名 test のクラスです。B は属性として A を持っています。
ファイルはそれぞれのフォルダーに保存されます(パッケージごと)
これを JAVA Compiler API でコンパイルできません。
java - javax.tools.JavaCompiler などを使用する
Oracle の Java Compiler API の使用例を探しています。javac
エラーログ機能をカスタマイズ/拡張するために、近いものを構築したいと考えています。
java - JavaCompiler API を使用して一度に複数の Java クラスをコンパイルする方法
私はJavaが初めてで、このチュートリアルは非常に有益であり、すべてを詳細に説明しているため、このチュートリアルに従っています。チュートリアルの最後で、JavaFileManager を使用して複数の Java ファイルをコンパイルする方法を説明し、その例をいくつか示しますが、まだ複数のファイルを自分でコンパイルすることはできません。
もう1つの問題は、この例では1つのJavaファイルをコンパイルする方法しか示していないことです(すでに動作しています)が、複数のファイルで構成されたプロジェクトをコンパイルできるようにしたいので、問題が発生しています自分のシステムの複数の Java クラス
これは私が今持っているものです:
java - JavaCompilerを使用したディレクトリのコンパイル
JavaCompilerで単一ファイルをコンパイルするために使用されているコードは次のとおりです。
私の質問は、特定のディレクトリにあるすべてのソースファイルをコンパイルするためにこれを変更するにはどうすればよいですか?
java - Java コンパイラの run() メソッド
JavaCompiler に関するこのコードをオンラインで見つけました
そしてcompiler.run(null, null, null
、これらの 3 つの null がそれぞれデフォルトSystem.in
の 、System.out
および であることが示されていますSystem.err
。しかし、これらの API が見つからないため、これらの値は実際に何をするのでしょうか? 誰か説明してくれませんか?
java - 別の Java プログラムから Java プログラムを実行する
別の Java アプリケーションから Java プログラムを実行しようとしています。これが私のコードです:
javac
test.class
正常に動作し、bin ディレクトリにファイルを作成します。ただしjava -classpath C:/Users/Dinara/Desktop/D/bin test
、ファイルは実行されませんtest.class
。の内容test.java
:
Javaコマンドの認識に問題があると思います。この問題を解決するためのサンプル コードを教えてください。またはアイデアを共有してください。Netbeans を使用してメイン クラスを実行しています。アプリケーション フォルダーの場所は C:\Users\Dinara\Main です。
java - javax.tools.JavaCompiler を使用してメモリ内でコードを完全にコンパイルする
次のように、javax.tools パッケージ (JDK 1.7) の JavaCompiler を使用して、その場でいくつかのものをコンパイルしています。
それは機能しますが、すべてをメモリ内で実行したいと思います(たとえば、ソースファイルではなくコードで文字列を渡し、.classファイルではなくバイトコードを取得します)。おそらくコンソールと同じであるため、 InputStream
andパラメータを拡張しても意味がないことがわかりました。OutputStream
run メソッドをこのように機能させる方法を知っていますか? または、メソッドでこれを行うための確認済みの方法を知っていますgetTask()
か? (FileManager の拡張は簡単に見えますが、それほど簡単ではありません :)
java - JavaCompilerがファイルを正しくコンパイルしない
JavaCompilerに慣れて、それを使用してプログラムをコンパイルしようとすると、単一のファイルで構成されるプログラムを正常にコンパイルできますが、複数のファイルを使用してプロジェクトをコンパイルしようとすると、他のクラスを実装するファイルのコンパイルや、クラスが実装されたクラスのメソッドを使用する場合は常にエラーが発生します。
これが私がJavaコードをコンパイルするために使用しているコードです
これが私がコンパイルしようとしているクラスの1つのサンプルです
ここで何が問題になっているのか、実装されているクラスと同じフォルダーにあるのに、コードが実装されているクラスを見つけられないのは誰か知っていますか?
パッケージがプログラムの一番上にないからですか?
編集:これは上記の例の出力エラーです
これがSystem.getProperty("java.class.path")
戻ってきたものです
java - アノテーションバインド時間(Javaでアノテーションがバインドされる場合)
dev環境とprod環境のどちらにいるかに応じて、データベースのテーブル名を変更する必要があるコードを記述していました。Dynomo DBの高レベルAPIを使用しているため、テーブル名は注釈として定義されています。たとえば、次のコードが可能であり、その動作を管理するルールは何ですか。
これがもたらす質問のクラスターは次のとおりです。
- Java Boundのアノテーションはいつですか?コンパイル時または実行時?
- 実行中にバインディングを変更できますか?
ありがとう。