Javaコードの4行はどのようにして518772行のラインで生産されます.


数週間前、オランダのJAVA会議Jspringのプレゼンテーションをする機会がありました.話はJava依存管理についてでした.
この話の間、私は簡単なスプリングブートアプリケーションを作成し、自分の書いたライン数に対するJava依存関係の数を決めました.これは、あなたの依存関係があなたのアプリケーションで大きなスペースを占めて、注意も必要であることを示すことでした.プレゼンテーションの後、私は多くの注目を集めて、このブログ記事をドラフトするために私をincentivizedした次のつぶやきを出版しました.

行の数を取得する


Sprp 1 :スプリングブートアプリケーションを生成する


まず、Spring Boot Initialzrを使用して、春のブートアプリケーションを作成しました.

Javaの依存性の追加
これは基本的に私のプロジェクトにはwebが唯一の直接的な依存関係であることを意味します.

STEP 2 : RESTコントローラの作成


次に、あなたが考えることができた最も簡単な4行の休憩点を書きました.
@RestController
public class Controller {

   @GetMapping("/hello")
   public String hello() {  return "hello"; }
}

ステップ3 :展開可能なjarファイルをビルドする


このJavaプロジェクトから作成されたJARファイルは、プロジェクトが依存するすべてのjarファイルを含む太ったjarファイルです.これは、基本的には、アプリケーション自体がアプリケーションサーバーに含まれているためです.

ステップ4:瓶の分析


次のことは、作成されたスプリングブートjarを消費する単純なアプリケーションを構築することでした.これは、jarファイルとそれが保持する依存関係のすべてをアンパックします.jarファイル内のすべてのクラスファイルが解凍され、コードの行がカウントされます.

ステップ5 :結果を収集する


コードの行
ジャー:33
クラスファイル: 9917
コードの行:518772

数論ノート


上記の数字は正確ではない.単一のブラケットを持つ白い線と線は省略されます.
我々がこれらの線をよりよく分析しなければならなくて、さらにそれを省略する必要があるならば、我々が数がより正確であることを望むならば、それは難問です.また、別のディフェンダーを別の結果を与える.
私は、これが疑似科学のより多くを考慮します.数字は正確ではありませんが、それは我々のアプリケーション内で大きな役割の依存関係を再生表示されます.これは私の意図でした.

Java依存関係を注意してください


OK、数字は大きいですが、この例は実際に何を教えますか?まず第一に、Hello Worldアプリケーションのためにスプリングブートを使用することは、overkillです.第二に、春のブートは、アプリケーションのサーバーは、これらの大規模な数が予想されるので、右ですか?
これらの発言はすべて本当だ.これは、あなたがこれまでに書くことができた最も無駄な休息終点でした.しかし、これは依存関係が生産に入ったバイナリの大部分を占めるという事実を強調します.スプリングブートはJava開発者のトンによって使用されるフレームワークですので、私は意図的にこの例のためにそれを選びました.
考えてください.この例では、コードIの行は、我々が生産にプッシュするコードの全ラインの1 %よりはるかに少ないです.しかし、チームとして我々はすべての責任があります.何かがアプリケーションと間違っている場合は、開発チームはそれを解決する必要があります.コードの見直し、ペアプログラミングと場所の自動静的解析のようなものを確実により良いコードベースを作成するのに役立ちます.しかし、我々が使用するコードの99 %については、大きく依存します.
あなたの依存関係の世話をし、時間にそれらをアップグレードすることが不可欠です.多くの依存関係と多くの可能な攻撃要因で1つのパッケージ結果を輸入すること.依存関係がどのように選択され、更新され、削除されるかに関するJava依存性管理戦略の作成は、開発チームが考慮すべき何かです.セキュリティの観点から、依存関係や一時的な依存関係のいずれかが脆弱性を持っている場合は、少なくとも注意してください.
あなたのオープンソース依存性の脆弱性を検出するためにSnykを使用してアプリケーションをスキャンすると、これを助けることができます.SNYKがあなたのソフトウェア開発ライフサイクル(SDLC)のあらゆるステップで使われることができて、非常に適応可能です、それはオートメーションに絶好です.SNYKだけでなく、それが可能な限り早期に脆弱性を検出する脆弱性を検出します.

結論


私たちのコードの良い世話をするだけでなく、我々はまた、我々のアプリケーションの巨大な役割を果たすように私たちの依存関係に目を離さなくてはならない.
Snykのようなツールであなたの依存関係をスキャンすることによって、あなたの依存関係の脆弱性は気づかれずにすべりません.さらに、固体Java依存管理戦略を実装することは、あなたのアプリケーションをメンテナンス可能で、スケーラブルで、予測可能で、最も重要なことに、安全に保つことにおいて重要です!