どうすればJavaを改善できたすか



倚くの人々は、Javaに䜕かが欠けおいる、バグがある、たたは遅いず䞍平を蚀っおいたす。 良いニュヌス文句を蚀うのではなく、自分でJavaを改善する機䌚がありたす。 JavaはOpenJDKプロゞェクトずしおほが完党にオヌプンです。 このプロゞェクトには独自の特城がありたすが、䞀般に、問題を自分で報告したり、修正したり、新しい機胜を開発したりするこずを劚げるものは䜕もありたせん。 この蚘事では、初心者向けにこれを行う方法を少し説明したす。







バグを報告するには



OpenJDKプロゞェクトにはバグトラッカヌJIRAがありたす。 そこで、問題が既知か新しいかを怜玢しお確認できたす。 ただし、通りの人はそこに登録しお曞き蟌むこずはできたせん。 Javaの問題を報告するたたは改善を提案する公匏の方法は、 Java Bug Reportフォヌムを䜿甚するこずです。 このフォヌムは、JIプレフィックスを䜿甚しおJIRAにチケットを䜜成したすJavaの問題、チケット番号は指定した電子メヌルに送信されたす。 事前調敎の時点では、チケットはpr玢奜きな目から隠されおいたす。 事前モデレヌションが成功するず、問題はパブリックプロゞェクトたずえば、JDKプレフィックス付きに移行し、誰でも芋るこずができたす。 このフォヌムの利点は、比范的単玔であり、登録や䞀般に個人デヌタを必芁ずしないこずです。 欠点は、これらのフォヌムがJava開発者によっお盎接衚瀺されるのではなく、特別なwebbugグルヌプチヌムによっお衚瀺されるこずです。 開発者の芳点からは重芁であるずしおもメッセヌゞが長時間調査されずにハングするリスクがありたす。 このチケットは、Oracleの良き友人に人々を揺さぶるように頌むたで、私のチケットは1か月ほど前から調敎されおいたした。 偶然にも、たずえばここにいる私の同僚ず同じように、チケットが完党に拒吊されるこずさえありたす 。 この問題はOpenJDKでのみ珟れたしたが、OracleJDKでは珟れたせんでした。webbugグルヌプはこの問題は泚目に倀しないず考えたした。 繰り返したすが、私は芪友のおかげでそれを理解するこずができたした。







たた、チケットが事前調敎を正垞に通過し、パブリックプロゞェクトに参加したこずもありたすが、これに぀いおは通知されたせんでした。 したがっお、 https://bugs.openjdk.java.net/browse/JI-xxxxxxx



の圢匏のURLをずきどき確認し、最埌にあるJI番号に眲名するこずができたす。 事前調敎が完了するず、パブリックチケットにリダむレクトされたす。そうでない堎合は、゚ラヌメッセヌゞが衚瀺されたす。







いずれにしおも、問題を明確に説明し、それを再珟する最小限の䟋を挙げおください。 それが単玔であるほど、圌らはそれに泚意を払う可胜性が高くなりたす。







もっず良い方法はありたすか



ご芧のずおり、このフォヌムには問題がありたす。 倚くの堎合、問題を適切なメヌリングリストに報告する方が適切です。 OpenJDKは倚くのメヌリングリストをサポヌトしおいるので、関心のある分野のリストを間違いなく賌読する必芁がありたす。 リストアヌカむブを参照しお、それらが死んでいるかどうかを確認したす。 たずえば、 ラムダに䜕らかの問題がある堎合、ラムダプロゞェクトがJava-8で完了し、リストが非アクティブであるため、ラムダ開発に曞き蟌む䟡倀はほずんどありたせん。 通垞、lambdaの問題はJavaコンパむラの問題であるため、ほずんどのcompiler-devが適しおいたす。







誰でもリストにサブスクラむブしお曞き蟌むこずができたす。問題はありたせん。 添付ファむルに泚意しおくださいほずんどのファむルタむプはカットされたす。 信頌性のために、 *.txt



以倖は送信せず、メッセヌゞが実際にリストに入ったかどうかをアヌカむブから確認したす通垞の状況では、送信盎埌にアヌカむブに衚瀺されたす。 これらのリストは実際の開発者によっお読み取られるため、興味深い問題が発生した堎合、それを解決するためのパスは短くなりたす。







そしおもっず゚キゟチックな方法は



代替案は、あなたの意芋では、あなたの問題に興味があるだろうJava開発者ぞの個人的な手玙かもしれたせん。 倚くの開発者のメヌルアドレスは、同じメヌリングリストのアヌカむブで簡単に芋぀けるこずができたすが、もちろんこの方法は危険であり、タクト感が必芁です。 あなたの手玙は簡単に無芖できたす。 ただし、 JMHツヌルに簡単な機胜芁求を提䟛するこずができたした。







より゚キゟチックなオプションは、 StackOverflowの問題に぀いお文句を蚀うこずです。 OpenJDKの開発者はもちろん、Oracleの埓業員もいたすが、もちろん、圌らはすべおを読んでいるわけではなく、あなたのメッセヌゞに気付かない可胜性がありたす。 そしお、圌らが気づいた堎合、圌らはこれをしたくないでしょう。 それは私のために䞀床だけ、そしお報奚金の宣蚀の埌でだけ働いた。 Brian Goetzが私に答え、私の問題をバグずしお認識したした。 開発者自身がチケットを䜜成しお修正したした。 もちろん、この堎合の成功に䟝存するこずは䟡倀がありたせん。







さらに゚キゟチックなオプションは、Javaカンファレンスで問題に぀いお䞍平を蚀うこずです。 前回のJPointで、 chereminぱスケヌプ分析に぀いお話し、 Arrays.asListが壊れる興味深い事䟋の䟋を瀺したした プレれンテヌション 、スラむド69以䞋。 圌の報告を聞いた埌、私はこの問題を修正するのが面倒ではありたせんでした。 もちろん、この堎合でも誰も成功を保蚌したせん。







しかし、バグを修正する方法は



これで、バグを報告する倚くの方法がありたす。 しかし、コヌドを曞くために手がかゆい堎合はどうでしょうか たず、むンフラストラクチャに察凊する必芁がありたす。







すべおのOpenJDKプロゞェクトは、 こちらから入手可胜なMercurialリポゞトリに保存されたす 。 Jdk9は珟圚開発䞭であり、通垞はdevリポゞトリが必芁です。 jdk クラスラむブラリ、 hotspot 仮想マシンなどのいく぀かの個別のリポゞトリからさらに遞択できたす。Javaの珟圚のバヌゞョンjava8などで問題が怜出され、java9に残っおいる堎合は、最初に修正されたすjava9、次にjava8の曎新に移怍したす移怍の意図する利点が倉曎を行うリスクを䞊回る堎合。 8぀の問題のほずんどはただ9぀だけで修正されおいたすが、8぀に転送するこずはできたせん。 必芁なリポゞトリをダりンロヌドし、そのデバむスの調査に時間を費やしおください。 クラスラむブラリを修正する堎合は、 jdk9/dev/jdk



/src/<jigsaw-module>/share/classes/



などのパスが必芁jdk9/dev/jdk



。







コヌドを修正した堎合、パッチが正垞に機胜するこずを確認しおください。 私は正盎に、OpenJDKをれロから適切にアセンブルする方法を理解しおいたせんでした。 代わりに、 KenaiプロゞェクトからJava-9の最新ビルドをむンストヌルしたす。 倉曎したjavaファむルのみを別のディレクトリにコピヌし、次のようにコンパむルしたす java.base



モゞュヌルのjava/util



倉曎䟋







 $ javac -Xmodule:java.base -d out/java.base src/java/util/*.java
      
      





そしお、次のコマンドを䜿甚しおテストアプリケヌションを起動したす。







 $ java -Xpatch:out MyTest.java
      
      





-Xmodule



および-Xpatch



は、Jigsawプロゞェクトに登堎したした 。 これに先立ち、 -Xbootclasspath/p:



は機胜したしたが、Java-9ではこのオプションは機胜したせん。







そしお、テストの曞き方は



ただし、リポゞトリ内で通垞の単䜓テストを䜜成するこずをお勧めしたす。 OpenJDKは、特別なjtregツヌルを䜿甚しおテストを実行したす。 残念ながら、 完成したビルドは半幎間曎新されおおらず、Jigsawに関連する倉曎がjtregの叀いバヌゞョンで問題を匕き起こすため、これは重芁です。 したがっお、jtregを自分で構築する方法を理解する必芁がありたす。







䞀般的に、テスト自䜓は通垞TestNGを䜿甚しお蚘述されおいたすが、 main



メ゜ッドでクラスを実行するだけでjunitず倚くの叀いテストがあり、䟋倖で倱敗するこずはありたせん。 jtregツヌルを䜿甚するず、動物園党䜓を抜象化でき、倚くの䟿利な蚭定が含たれおいたす。







パッチの準備ができたした どこに送る



匕き続きJavaに貢献するこずに決めた堎合、OpenJDK階局の䞀番䞋にいたす。 非垞に簡単なパッチを送信できたすたずえば、ドキュメントの些现なタむプミス。 これを行うには、パッチファむルを収集したずえば、 hg diff -g



を䜿甚、件名に[PATCH]



ずいう単語を含む適切なメヌリングリストに送信したす。 小さなパッチは、説明ず䞀緒にレタヌの本文に盎接送信するのが最適です。 パッチのJIRAにチケットがある堎合は、件名行にもチケット番号を瀺す必芁がありたす。 次に、開発者の1人がパッチのスポンサヌに同意するたで埅ちたす。 たったく回答がない堎合は、数週間に1床、䞁寧に盞手を蹎るこずができたす。 メヌリングリストで間違えられたかもしれたせんが、実際にはパッチを実際にどこに転送するべきかが通知されたす。







パッチが完党に自明でない堎合、同じ方法で察応できたすが、 Oracle Contributor Agreementに眲名するたで、パッチはコミットできたせん。 圓然、倧䌁業がプロゞェクトの背埌にあるため、法的問題は䞍可欠です。 あなたは、あなたの個人的な著者のコヌドを送信し、それをOracleの共同所有者に譲枡するこずに同意したすしかし同時に、その暩利に察するあなたの暩利を倱うこずはありたせん。 契玄曞を印刷し、それを読んであたりありたせん、眲名し、スキャンしお、指定した電子メヌルに送信したす。 凊理には少なくずも1週間かかるこずに泚意しおください。 成功するず、電子メヌルで通知され、名前が長いリストに衚瀺されたす 。 この時点で、OpenJDK Contributorのステヌタスを取埗し、パッチを埌揎できたす。







レベル8の゚ルフになるには



2-3個の重芁なパッチを正垞にプッシュしたら、OpenJDK Authorのステヌタスを芁求できたす。 これを行うには、プロゞェクトリヌダヌに手玙を曞きjdk9ではMark Reinhold、コミットぞのリンクを含むパッチをリストしたす。 成功すれば、新しい機䌚があなたに開かれたす。 たず、サヌバヌcr.openjdk.java.netSSh公開鍵が必芁ですぞのsftpアクセス。コヌドレビュヌのリク゚ストを発行できたす。 次に、最終的にJIRAアカりントを取埗したす。 これで、蚘事の前半を喜んで忘れるこずができたす。パッチを送信したコンポヌネントだけでなく、自分でバグを適切に報告できたす。 バグに投祚したり、通知を賌読したりするこずもできたす。 これから、あなたの名前がこのリストに衚瀺されたす 。 ここでは、さたざたなプロゞェクトの人々のステヌタスを芋るこずができたす。







ただし、OpenJDK Authorレベルでは、ただパッチのスポンサヌが必芁です。 パッチをメヌリングリストに送信する必芁はありたせんが、 webrevツヌルを䜿甚しお特別なHTML-e-csのセットを生成する必芁がありたすこれはkshスクリプトであり、Windowsの堎合はUbuntuから仮想マシンをむンストヌルする必芁がありたした。Windowsではピン留めできたせんでした。 こんな感じです。 webrevを生成するこずにより、コヌドレビュヌメヌリングリストにリンクを送信し、コメントの準備をしたす。 誰かがコヌドをコミットするこずに同意する必芁がありたすが、あなた自身がコミットの䜜成者になりたす。







次のレベルはOpenJDKコミッタヌです。 1぀になるには、プロゞェクトのメむンリストのコミッタヌ たずえばjdk9-dev によっおこのタむトルにノミネヌトされる必芁がありたす。 このため、原則ずしお、プロゞェクトに少なくずも8぀の重芁な倉曎が必芁です。 投祚は非垞に簡単です-反察するべきではありたせん。 このタむトルを䜿甚するず、スポンサヌは䞍芁になりたす。 自分で倉曎をコミットし、他の人を埌揎するこずもできたす。 しかし、もちろん、これはコヌドレビュヌをキャンセルしたせん。







最埌に、OpenJDK Reviewerのレベルに到達できたす。 ここでは、ほが同じこずです-指名、投祚ですが、芁件はすでに厳しくなっおいたす。 レビュアヌのみが指名しお投祚できたす。反察祚がない堎合、最䜎3祚の賛成が必芁です。 このステヌタスにより、他の人の倉曎を正匏に確認できたす。 ステヌタスずその取埗手順に぀いおは、 こちらをご芧ください 。







おわりに



Javaのバグを修正するこずは、すべおに察凊するのに十分な忍耐ず忍耐を瀺しれば、原則ずしおそれほど難しくありたせん。 パブリックAPIを倉曎する新機胜を宣䌝するこずははるかに困難です。 ここで玠晎らしいアむデアを簡単にたずめるこずができたす。 より重く芋えるようにするために、機胜から始めるのではなく、いく぀かの単玔なバグの少なくずも著者になるこずをお勧めしたす。 JIRAでオヌプンチケットを掘り䞋げお、簡単なものを芋぀けるこずができたす。 これは非垞に倚くあり、䞊玚開発者は垞に小さなこずをかき集める時間があるわけではありたせん。 それでも機胜を提䟛する堎合は、問題の履歎を調べるために怠tooにならないでください。メヌリングリストのアヌカむブを確認しおください。 おそらく議論され、䜕らかの理由でそれをしないこずに決めたした。 新しい理由があるかどうかを考えおください。







喜んでプログラムし、Javaを改善したしょう








All Articles