問題タブ [javacompiler]

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 投票する
1 に答える
205 参照

java - Java コンパイラ レベルを 1.6 から 1.7 に変更するには、すべてのクラスをデプロイする必要がありますか?

私はEclipse LunaにJava Webプロジェクトを持っています。コンパイラレベルは「1.6」です。

1.7 の機能が必要なので、レベルを「1.7」に変更し、プロジェクトの Java コードを変更します。コンパイルエラーはありません。

次に、コードをデプロイします。私の質問は;

変更されたクラスのみを本番環境にデプロイしても安全ですか? または、すべてのクラスをデプロイする必要がありますか?

PS:本番サーバーの JRE レベルはすでに 1.7 です。

よろしく。

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

java - Java for ループの最適化

java for loops を使用していくつかの実行時テストを行い、奇妙な動作を認識しました。私のコードでは、io と出力パラメーターをシミュレートするために、int、double などのプリミティブ型のラッパー オブジェクトが必要ですが、それは重要ではありません。私のコードを見てください。フィールド アクセスを持つオブジェクトは、プリミティブ型よりもどのように高速化できますか?

forプリミティブ型のループ:

結果:

MicroTime プリミティブ (最大: =10000.0): 110
MicroTime プリミティブ (最大: =100000.0): 1081
MicroTime プリミティブ (最大: =1000000.0): 2450
MicroTime プリミティブ (最大: =1.0E7): 28248
MicroTime プリミティブ (最大: =1.0E8) : 276205
MicroTime プリミティブ (最大: =1.0E9): 2729824
MicroTime プリミティブ (最大: =1.0E10): 27547009

for単純型のループ (ラッパー オブジェクト):

結果:

MicroTime ラッパー (最大: =10000.0): 157
MicroTime ラッパー (最大: =100000.0): 1561
MicroTime ラッパー (最大: =1000000.0): 3174
MicroTime ラッパー (最大: =1.0E7): 15630
MicroTime ラッパー (最大: =1.0E8) : 155471
MicroTime ラッパー (最大: =1.0E9): 1520967
MicroTime ラッパー (最大: =1.0E10): 15373311

反復回数が多いほど、2 番目のコードは高速になります。しかし、なぜ?java-compiler と jvm がコードを最適化していることは知っていますが、プリミティブ型がフィールド アクセスを持つオブジェクトよりも遅くなる可能性があるとは思いもしませんでした。
誰かがそれについてもっともらしい説明を持っていますか?

編集: HDouble クラス:

コードを含むループもテストしました。たとえば、合計を計算します -> 同じ動作です (違いはそれほど大きくありませんが、原始的なアルゴリズムはもっと速くなければならないと思いましたか?)。最初に私が考えたのは、計算にそれだけの時間がかかり、フィールド アクセスにほとんど違いがないことです。

ラッパー for ループ:

結果:

MicroTime ラッパー (最大: =10000.0): 243
MicroTime ラッパー (最大: =100000.0): 2805
MicroTime ラッパー (最大: =1000000.0): 3409
MicroTime ラッパー (最大: =1.0E7): 28104
MicroTime ラッパー (最大: =1.0E8) : 278432
MicroTime ラッパー (最大: =1.0E9): 2678322
MicroTime ラッパー (最大: =1.0E10): 26665540

プリミティブ for ループ:

結果:

MicroTime プリミティブ (最大: =10000.0): 149
MicroTime プリミティブ (最大: =100000.0): 1996
MicroTime プリミティブ (最大: =1000000.0): 2289
MicroTime プリミティブ (最大: =1.0E7): 27085
MicroTime プリミティブ (最大: =1.0E8) : 279939
MicroTime プリミティブ (最大: =1.0E9): 2759133
MicroTime プリミティブ (最大: =1.0E10): 27369724

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

java - SimpleJavaFileObjectカスタム(私が作成した)パッケージをインポートする方法は?

初めて来たので...

タスクは、動的クラス (文字列から作成) のコンパイルと、その後のインスタンス化の作成にあります。

問題は、別のフォルダーに配置されたカスタム パッケージ/クラスを動的クラスにインポートすることです。例:import controller.*;エラーが発生した後:

しかし、標準パッケージ (ライブラリ) は問題なくインポートされ、コンパイルは同じように終了しました。

JavaCompiler Api の getTask メソッドを使用して解決しようとしましたが、optionList にパスを送信しましたが、成功しませんでした。

では、カスタム パッケージのインポートを修正するにはどうすればよいでしょうか。

これが私のコードです:

前もって感謝します!

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

java - 依存クラスの作成時にJavaCompilerがエラーを出す

2 つのクラスを生成するコードを作成し、それらをバッファリングして JavaCompiler でコンパイルしました。私のクラスは .java ファイルではこのようになっています。

このようなもの。

ただし、クラスの名前はランダムに生成され、ファイルを作成すると次のようなエラーが発生します。

./src/A.java:4: error: cannot find symbol

(4行目は「...extends ArrayList...」で、Aの下に^記号があります)

私のコード ジェネレーターは次のようにコンパイルされます。

最初に、A 型クラスのテンプレートでバッファーを埋めてから、次のようにコンパイルします。

その後、別のバッファーを作成し、B 型クラスのテンプレートを入力してから、次のようにコンパイルします。

fは;

どうすればこの問題を解決できますか?

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

java - 複数の外部 jar ファイルを使用して Java プログラムをコンパイルして実行する

Excelファイルを操作するためにapache.poi外部ライブラリを使用する簡単なプログラムがあります。私は Windows 環境で Eclipse を使用していましたが、今ではターミナルを使用して Linux でプログラムをコンパイルして実行する必要があります。必要なjarを含める方法を検索しましたが、次のエラーが発生しました。

エラー: メイン クラス xlsToCsv が見つからないか、読み込めませんでした。

私が従った手順は次のとおりです。

javac -cp ./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-20150929.jar:./jars/xmlbeans -2.6.0.jar xlsToCsv.java

java -cp ./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-20150929.jar:./jars/xmlbeans -2.6.0.jar xlsToCsv

現在のディレクトリは /home/demo/Desktop/xls_to_csv で、ここに xlsToCsv.java ファイルがあります。jar ファイルは /home/demo/Desktop/xls_to_csv/jars にあります。

誰でも私に教えて、正しい構文を説明できますか? それらを個別に呼び出す代わりに、すべてのjarファイルを含むフォルダーを呼び出すことは可能ですか?

前もって感謝します。

編集、私のコード:

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

android - Android databindingError: 解決後に構成 ':mobileBanking:compile' の依存関係を変更できません

プロジェクトにデータバインディングを追加するのに苦労しています。複雑な build.gradle があります。残念ながら、私はそれからあまりにも多くを投稿することはできません.
アプリの build.gradle ファイルの Android ブロックに databinding {enabled = true} を追加すると、次のエラーが発生します -->

エラー:構成 ':projectName:compile' の依存関係は、解決後に変更できません。null オブジェクトのプロパティ 'javaCompile' を取得できません。

クラスパスにデータバインディング ライブラリを追加しました。dataBinding {enabled = true} ブロックを追加しないと、ビルドは成功し、生成されたソースが間違ったフォルダーにあるという警告が表示されます。

何か案は?

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

java - JavaCompiler は実際にはクラスをコンパイルしませんでした

リフレクションを使用して、新しく作成された Java クラスのすべてのメソッドを取得したいと考えています。以下のように、別のファイルからコピーして Java クラスを作成し、JavaCompiler を使用して新しく作成した Java をコンパイルします。しかし、なぜターゲット クラス ファイルが作成されなかったのかはわかりません。PS: 間違ったソース ターゲット Java ファイル パスを指定すると、"javac: cannot find file: codeGenerator/Service.java". 皆さん、ありがとうございました。

コンパイル方法: