さまざまな言語のすべてのプロジェクトを含むフォルダーがあります。次に、コードで最終的に使用する可能性のあるライブラリ(主にjarファイル)を取得します。受け入れられている慣習があると確信していますよね?専門家は何をしますか?
5 に答える
これは、実際に使用するツールと、それをどのように整理するかによって異なります。
たとえば、Eclipseを使用しているが、すべてのプロジェクトを1つのワークスペースに配置したり、プロジェクトごとに1つのワークスペースを使用したりする人々を見てきました。プロジェクトの実際のストレージも異なる場合があります。ですから、受け入れられている慣習はないと思います。
何が自分に最適かを理解する必要があると思います。
Workというフォルダがあります。このフォルダの下に、プロジェクトがあります。
プロジェクトには、開発したすべてのソフトウェアが含まれており、それぞれに1つのディレクトリがあり、従来の名前が付いています。各ディレクトリは完全なバザーリポジトリであり、タグ、トランク、ブランチが含まれています(私の古いsvnスタイルの遺産、おそらくすぐに変更される予定です)。
また、プロジェクト用の特定のランタイムを開発します。各ランタイムは、必要なものすべてをダウンロードしてコンパイルするmakefileを介してダウンロードおよびインストールされます(libs、インタープリター、および一部のlibが特定のバージョンを必要とする最悪のシナリオのコンパイラー)。
私の仕事は主に小さなコードに関係しているので、プロジェクトにアーカイブされたサブフォルダーと古いサブフォルダーもあります。ここでは、使用しなくなったもの(最初)またはより優れたプログラム(古い)に取って代わられたものを入れます。古いコードは明日役立つかもしれないので、捨てることはありません。
デプロイと使用のために、各Projectサブディレクトリにアクセスして依存関係をダウンロードし、すべてをコンパイルして、nutzファイル(Chestnut Package Managerユーティリティの一種のjarファイルであり、私の製品でもあります)としてパッケージ化するPythonスクリプトがあります。
ただし、ほとんどの場合、専門家はすべてを行うIDEを使用します。IDEの使用と学習には、私が行ったことよりも時間がかかることが多いため、このアプローチは好きではありません。IDEは、ビジネスクライアントが存在し、チームが関与する可能性のある大規模なソフトウェアプロジェクトがあるという考えで実装されています。私は現在この規模を超えています。私にとって、複雑なIDEを使用することは、海での素敵な週末に大西洋を横断するように渡されるようなものです。私の現在のニーズには完全にスケールが合っていません。
私にとっては、プロジェクトルートの下にある次のディレクトリのリストです。
- パッケージ階層を使用した.javaファイルのsrc
- リポジトリ(Spring distroなど)から取得していない限り、サードパーティのJARのlib
- JUnitまたはTestNGテストファイルのテスト
- .properties、.xmlなどのリソースまたは構成。
- WEB-INFとそのすべてのアテンダントを含むWebアプリケーションの場合はweb
- ドキュメントがある場合はドキュメント
私は春の人々が進化した構造が好きです。
私はIntelliJを使用しているので、IntelliJでうまく機能しなければならない構造が必要です。
Subversionのすべての作業コピーを保持するディレクトリ/workがあります。
使用するプログラミング言語に大きく依存します。私はJavaでプログラミングしていて、そこで見た中で最高の構造はmavenによって与えられています。
Mavenの優れた依存関係管理により、数十のjarファイルをいじくり回す必要はありません。既存のプラグインを使用して、想像できるほぼすべての目標を達成できます。また、プロジェクトを小さなサブプロジェクトに構造化して、最適に再利用できます。
私はバージョン管理リポジトリにすべてを持っています(nb:持っている、そしてバックアップをテストした非常に安心できるファイルのセット)。私の開発マシンには、現在/最近の作業をチェックアウトするためのProjectsフォルダーと、現在作業していない古いチェックアウト用のProjects/Archivesフォルダーがあります。プロジェクトにサードパーティのライブラリが必要な場合、それらは各プロジェクト内のthird_partyフォルダーに移動します。これらはgitサブモジュールで追跡され、そのプロジェクトで動作することがわかっている正確なソフトウェアバージョンを提供しますが、さまざまなプロジェクトで簡単に更新したり、一部のライブラリが必要なことを実行できない場合はハッキングしたりします。各プロジェクトは、信頼性などの合理的な範囲で、自己完結型でマシン間で移植可能でなければならないということです。