職場では、かなりの数のフロントエンド、バックエンド、およびサポート コンポーネントを含む大規模なアプリケーションを開発しています。通常、フロントエンドは C# で開発され、バックエンドは Java で開発されますが、バックエンドの一部は C# で開発され、その後 C++ で開発されることもあります。
言語とプラットフォームの選択は任意ではありません。私たちは、開発時間、ツールチェーンのコスト、特定の開発チームによる言語への習熟度など、それぞれの相対的なメリットを比較検討しようとしています。ただし、これらすべてのコンポーネントに共通しているのは、それらがすべて完全な操作に必要であるということです。製品であり、独立した (しかし非常にコミュニケーションの取れた) チームによって同時に開発されていること。
以前は、.NET コードに Team Foundation Server を使用し、Java コードに Subversion を使用していました。チームの責任が明確に分離されていたため、あるソース ツリーから生成されたバイナリ (この場合は WAR) を別のソース ツリーに配置する不便さと、ブランチとリビジョンの同期を維持するための高い手動オーバーヘッド以外の問題はほとんどありませんでした。このプロジェクトでは、チーム間の分離の程度は意図的に非常に小さくなり、分岐/マージの量はかなり多くなることが予想されます。その結果、統合された VCS、より具体的には Subversion に移行しています。
これが問題の本質につながります。Java と C# のコードを効果的に混在させるにはどうすればよいでしょうか。実際には、Java コードベースに依存する .NET コードを使用します。Java バイナリは、単体テスト コード以外のものを実行するために必要です (統合テストには既にバイナリが必要であり、QA、受け入れテストなどにも確かに必要です)。現在考えていることは次のようなものです。
/トランク /java /コンポーネント1 /コンポーネント2 /ライブラリ1 /ライブラリ2 /ネット /アセンブリ1 /アセンブリ2 /... プロジェクト.sln
ソース ツリー全体が 1 つのブランチの下に配置されるという考え方です。.NET コードは Java コードに依存しているため、(ほとんどの場合) Java コンポーネントの ant スクリプトを呼び出すビルド後の手順をソリューションに追加します。これにより、コードベース全体 (.NET 開発者の場合) または Java コンポーネントのみ (Java 開発者の場合) の分岐が可能になります。
このソリューションの問題点は次のとおりです。
- 2 つのコードベースのいずれかが非常に大きくなり、ブランチごとにコピーを作成することが現実的ではなくなった場合はどうなりますか? (私たちの考え: 分割して .NET と Java コードのリポジトリを分離し、svn:externals を使用します。これに関する意見をいただければ幸いです)。
- Java開発にはEclipseを使用しています。「共有」ワークスペースをどのように管理しますか (つまり、どのコンポーネントにどのプロジェクトが必要か、依存関係グラフなど)? これまで、Java コンポーネントは比較的少なかったので、各開発者はそれらすべてを同時にワークスペースに保持することができました。Java コンポーネントと Java 開発者の増加に伴い、どうすればそれを続けられるかわかりません。2 つのコードベース間の同期を維持しながら、ワークスペースのバージョン管理 (ソリューション ファイルのようなもの) を維持する方法について何か提案はありますか?
ご意見をお待ちしております。