問題タブ [javac]
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: 特定の列挙型と汎用の列挙型パラメーター
列挙値をユーティリティ クラスのメソッドに渡し、同じ列挙型の別の列挙値を取得したいと考えています。このようなもの:
メソッドの使用getEnumAttribute()
:
このコードは完全に機能し、Eclipse は警告やエラーなしでコンパイルして実行し、魅力的に機能します。
しかし、Maven2 でgetEnumAttribute
コマンド ラインからプロジェクトをクリーンアップしてコンパイルすると、呼び出された行でエラーが発生して失敗します。
Eclipse と Maven のいずれかで Sun JDK 1.6 を使用しています。
質問:
なぜこのコードはEclipse でコンパイル可能で機能的であり、私が知っている限り同じ javac コンパイラを使用しているMavenでコンパイルが失敗するのはなぜですか?
Enum<?>
特定の列挙型を汎用パラメーターに渡すことの何が問題になっていますか?
ありがとう、
マーティン・シャイナ
ant - Antでjavacを使用してソースパッケージを除外するには?
さまざまな例をたくさん見て、いくつかのバリエーションを試しましたが、これが正しく機能していないようです。また、javacでディレクトリ全体を除外することはできず、ファイルのみを除外することはできないようです。これは、パッケージを指定できないことを意味していると思いますか? ここに私が持っているものがあります:
eclipse - JDK / JRE / JVM / Java SDK | それらはすべてどういう意味ですか?JREで開発できる場合もあれば、JDKが必要な場合もありますか?
実を言うと、私はこれらすべての用語(JDK / JRE / Java SDK)についてかなり混乱しています。それぞれが何をしているのかわかりません。
Eclipseで簡単なJavaの例を最初に作成し始めたとき、私はJREしか持っていなかったと確信しています。これは、通常のユーザーがシステムでJavaプログラム/アプレットを実行できるようにするために使用するデフォルトのJavaインストーラーであると信じていました。
ただし、現在クラスではGoogle Appengineを使用しており、これにはJavaSDKと同じであると私が推測しているJDKが必要です。JDKをインストールするということは、コマンドプロンプトでjavac -versionを機能させるために、環境変数にjava / binを追加する必要があることを知って時間を無駄にした後、JDKだけがjavacを持っていることがわかりました...
私の初期のJavaプログラムは、JDKをインストールせずに、したがってjavacを持たずにどのように機能していましたか?そして本当に主な質問...JREとJDKの違いは何ですか、そしていつそれぞれを使用しますか?
ありがとうございました :)
java - Eclipse では APT ANT タスクが失敗するが、シェルからは機能する
javac
注釈プロセッサを実行することになっている antタスクがあります。バッチファイルから実行すると正常に動作しますが、失敗します
javac.exe コンパイラの実行中にエラーが発生しました
日食から開始したとき。通常のコンパイルjavac
タスクは問題なく動作します。
eclipse から開始された ant は、別のコンパイラを使用していると思いますか?
通常のコンパイラに変更するにはどうすればよいですか? または、何らかの方法で機能させますか?
java - javac/java ファイル システムの同時実行契約とは何ですか?
私は、2 つの依存する com.sun.tools.javac.Main.compile() 呼び出しを別々のスレッドで実行し、その間に ~10ms の一時停止を加えて、マルチスレッド ビルドを実行しています。毎度 (100 回のビルドごとに)、2 番目の javac は、最初の javac からの出力に不適切なクラス形式があると文句を言います。
これは Linux 上のものですが、すべての OS で動作する必要があります。ここで直面している制約は何ですか?
私は並行ビルド システムで作業しているので、javacs を呼び出す理由は、それらが異なるモジュールにあるためです。実行順序を保証する外部同期があります (ただし、compile() メソッドを呼び出すときに、実際には同期ブロック内にいるわけではありません)。それらが次々と呼び出されていることは確かです。 -平均で 20 ミリ秒の一時停止。compile() へのこれら 2 つの呼び出しは、実際にはファイル システムのみを共有する必要があることを理解できますか?
編集 2: 2 番目の compile() 呼び出しを呼び出すスレッドは、最初の呼び出しが完了するまで wait() にあるため、順序の同期が行われます。しかし、コンパイルする実際の呼び出しを呼び出すとき、私は同期ブロック内にいません。Compile は静的メソッドであり、そのコンテキストでの内部的な安全な公開の問題はないと想定しています...(?)
編集 3: compile() の呼び出しを同期しても役に立ちません。Linux に対して sync() を呼び出すだけでも同様です。しかし、可能であれば、Java レベルでのバッファのフラッシュについては調べていません。
ant - ant エラー 古いファイルの名前を一時ファイルに変更できません
Ant 1.8.0 と Java 1.6.0.17 を使用していますが、奇妙な問題が発生しています。
私のbuild.xmlには、コードをコンパイルする簡単なタスクがあります
「クラスパス」にはjarがあり、それを呼び出しますlibrary.jar
後のタスクで、いくつかのクラスを に追加する必要がありますlibrary.jar
。
これはエラーで失敗します
Unable to rename old file (library.jar) to temporary file
javac 呼び出しの前後に handle.exe の呼び出しにスタックしました。ant を実行している Java プロセスが、javac 呼び出し中に library.jar へのファイル ハンドルを取得し、放棄していないことを確認できます。これにより、後でjarを更新しようとして失敗します。
javac タスクが完了した後でも、ant がクラスパス内の jar へのハンドルを開いたままにしておくのはなぜですか?
java - Javaソースファイルをコンパイルするにはどうすればよいですか?
私のソースファイルは次のフォルダにあります:c:\ data\mycompany。すべてのソースファイルには、最初の行として次のものが含まれています。ここで、c:\ dataフォルダーから、次のコマンドを使用してすべてをコンパイルしました:javac mycompany/*。java-extdirsc:\ some \ other \ folder \ with\libs。これは正常にコンパイルされます。次のコマンドを使用して(これもc:\ dataから)実行しようとすると、java mycompany / testとすると、次のエラーが発生します。
スレッド"main"の例外
java.lang.NoClassDefFoundError:
mycompany / test原因:
java.lang.ClassNotFoundException:
mycompany.test at java.net.URLClassLoader $ 1.run(不明なソース)
以下のコマンドも試しましたが、同じエラーが再現されます。
java mycompany / test -extdirs c:\ some \ other \ folder \ with \ libs
これはコンパイル/実行するための適切な方法ですか?
これが私のソースコードです:
java - パッケージ情報なしでjarファイルを使用するにはどうすればよいですか?
「MyTools」という瓶があります。jarファイルはc:\dataフォルダーにあります。同じフォルダに「UseTools.java」という名前の新しいファイルを作成しました。ここで、UseTools.javaのMyTools.jarのクラスのいくつかを使用したいと思います。私はこれを試しましたが、うまくいかないようです:
私はこれを次のようにコンパイルしようとしました:
そしてこのエラーメッセージを受け取りました:
どのクラスにもパッケージ名を設定していません。
jarクラスにパッケージ名を設定する必要がありますか?
java - Java パッケージのビルド (すべてのファイルへの javac)
ディレクトリ内のすべてのファイルを *.class ファイルにコンパイルする方法は?
java - _within_build.xmlからEclipseコンパイラーを完全に指定する
実験として、JDKの代わりに実行時バージョンのJava6でEclipsejavaコンパイラ(eclipse.orgからダウンロードしたecj-3.5.jar)を使用して製品を構築したいと思います。私が理解しているように、これは追加の問題です。このjarをantクラスパスに設定し、build.compilerプロパティをアダプターを指すように設定します。
含めることによって
build.xmlでantをJREで呼び出すと、アダプターが見つからないという予期されたエラーが発生します。Eclipseパネルのクラスパスにecj-3.5.jarを追加することで、期待どおりにコードをコンパイルできます。現代のアリのコマンドラインから「-libfoo.jar」で利用できるのと同じ機能があると思います。
ここで、 build.xml内から、クラスパス上のecj-3.5.jarが上記と同じを満たすように指定したいと思います。すでにアリのタスクでこれを行うことができるので、それは可能だと思います。
したがって、問題は次のとおりです。javacが使用するクラスパスに追加して、build.xml内からのみコンパイラを検索するにはどうすればよいですか。
今後のant4eclipse1.0にはEclipseコンパイラー(これを使用したかった)が含まれているようです。したがって、(0.5から)それにアップグレードすることで、私たちが抱えている問題を解決できるはずです。
2010-09-24:Ant4Eclipseは、リリースがいつ行われるかを示すことなく、まだM4のままです。
2011-12-01:アリからメイヴンに移行しました。build.xmlスクリプトは複雑さの壁にぶつかり、新しいアプローチが必要でした。何をするかを選択する必要がある人は誰でも-些細なプロジェクトを除いて、ant4eclipseパスに進まないでください。
2012-11-30:1年後、Mavenのエクスペリエンスはまだほとんど良好です。考え方には多くの癖や変化がありますが、そのほとんどは文脈において意味があります。Mavenは、個々のプロジェクトのコンパイラレベルを簡単に指定できます。javacの代わりにecjを使用することを検討しています(いくつかの理由で)が、ほとんどの目的でjavacはうまく機能します。