2009-02-20 7 views
8

開発者として、私はあなたの人生を楽にしてくれる新しい言語機能に興味を持っています。たとえば、Java 5はジェネリックとアノテーションをその言語にもたらしました。あなたの生産性を確実に高めることができる機能です。私は戻ってJavaプラットフォーム上で作業を十年近くで見るとプラットフォームの強制的なバージョン管理メカニズムは、Javaの最も痛烈に必要な機能ですか?

はしかし、私はバージョン管理関連の問題は非生産的と不費やした努力の最大の犯人であることを見つけます。正しいバージョンのjarファイルを探したり、いくつかのバージョニングの競合を調整したり、依存ライブラリをアップグレードしたりするのにかかる時間と時間。Javaで作業を開始したときには、それほど難しくありませんでした。 。今日の典型的なWebアプリケーションでは、Spring Framework、Hibernate、Strutsのように簡単に使用できます。これらのすべてには、多数の従属第三者図書館があります。今日、私の耳のアーカイブには通常、40以上のサードパーティのライブラリが含まれています。本当の瓶詰め!

注釈では、たとえば、Hibernateの設定ファイルを管理する必要はありません。素晴らしい機能ですが、私の記述子を別々のファイルに保管しているという事実から多くの問題が発生しているのを見たことはありません。ジェネリックでは、キャスト文を書くことはできませんが、プログラミングキャリア全体では、タイプセーフなコンテナを使用することで防ぐことができたバグを覚えていません。バージョン管理の問題に対する解決策がはるかに価値があったでしょうか?

すべてのこれらの問題は、(冗談ではない!)MavenivyOne JarJar Jar Linksのようなツールの数をもたらしている、でも適切Jar Hellという名前などあなたがこれらのツールのいくつかを使用している場合でも、あなたははるかに影響されないからです問題。私はMaven 2を使用しており、大きな助けとなっています。それでも、それはそれ自体の世界です。初心者のプログラマーは、それを学ぶのにしばらく時間がかかります。レガシープロジェクトをMaven構造に移行することも苦労します。

.NETで、彼らはDLL地獄と.NETアセンブリの管理と教訓を学んだようだ

ははるかに簡単です。

OSGIのようなJavaプラットフォームと代替のためにこの問題を解決する計画があるようです。私はいくつかの基本的なプラットフォームと強制バージョン管理機構がひどくJavaはライブラリはOSにより密接に結びついているということである上、.NETが持つ

+0

これは質問よりも解説のようです。 – cletus

+0

私はそれが両方のビットであると思います(解説と暴言)。 私は基本的に他の人が私と同じ苦労をしているかどうかを見たいと思っていました。これまで何年もの間、これは私のチームにとって最も緊急の必要でしたが、この問題を効率的に解決できないという不満を感じます。 – Dan

+0

Rantかどうかは、まだ正当な質問です。投稿の本文に質問が繰り返されていなくても、タイトルは少なくともあります。 – tvanfosson

答えて

4

OSGiを見れば、バンドル(jar)のバージョン管理と管理が非常にうまくいきます。

ALSO:Eclipse(これはOSGiの上に構築されています)には、APIを以前のベースラインと比較してバンドルの次のバージョン番号を適切に表現する方法を決定する比較的新しいAPIツールがあります。

一般的な日食のバージョン管理方式:

v.m.n.q 

V:高レベルのバージョン - ここでの変更は、一般的にAPI

メートルの変化を壊す表します。主な変更点 - 新機能、新しいAPI

n:マイナーチェンジ - 同じAPI、裏返しの変更

q:修飾子 - ビルド、アルファベットなどをマークするのに便利です。

OSGiは、範囲を使用してバージョン依存性を指定します。たとえば、あなたのMANIFEST.MFで

Require-Bundle: com.javadude.foo;bundle-version="[1.2.0,2.0.0)" 

はバンドルがアップバージョン2.0.0(は含まない)を介して、後にバンドルcom.javadude.fooのバージョン1.2.0以上が必要ことを指定します。

パッケージレベルで依存関係を指定することもできます。

+0

私はOSGIについて知っていますが、詳細を見ていませんでした。私は、私が直面している特定の問題に対して、それが過度になる可能性があるという印象を受けました。私はそれをもう一度見せた時だと思う。 – Dan

+0

実際にはかなり軽量です。 が最も基本的なので、それを使ってバンドルの依存関係を管理できます。 これを使用して、他のバンドルのサービスを提供することもできます。 –

0

優位性を必要とされていると思います。フレームワークライブラリがインストールされていれば、GACに簡単に置かれているという事実は事を簡素化しますが、Windowsにもかなり制限されています。より良い比較はモノですが、そこには経験はありません。

構成管理は、少なくとも私にとっては、ソフトウェア開発の大きな苦労でした。既存のコードを利用しようとするほど、悪化するようです。問題自体はJavaに固有の問題ではありませんが、バージョンの増加、プラットフォームの使用時間、サポートされるプラットフォームの数が悪化するようです。私はちょうどチェックして、今は私のボックスにJREの3つのバージョンがあります - そして、私はアクティブなJava開発者でもありません。

質問には、それが最も重要な機能の必要性があるかどうかはわかりません。個人的には、Webサービス、特に認証ヘッダーを必要とするWebサービスのサポートを強化したいと考えています。 Javaを.NET Webサービスの1つと対話させようとした最後の時間に、私はほとんど私の髪を取り払いました。 C#/ NetでLINQを使用したことで、これは、Javaにはかなりクールなものになり、おそらく生産性の向上が期待できます。

+0

JSR 277(http://www.jcp.org/ja/jsr/detail?id=277)の背後にあるアイデアは、いくつかの同様の解決策を含めることが考えられますが、休止状態にあるようです。 – Dan

+0

私はOSGi(http://www.osgi.org/Main/HomePage)がJSR 277の多くの利点をすでに提供していると信じています。それだけでは複雑ではありません。 –

0

.NETはサイドバイサイドアセンブリをサポートしているため、同じアプリケーションの複数バージョンを作成できます。 GACは共有DLLと似ていますが、GACで同じアセンブリの複数のバージョンを登録することはできますが、覚えていれば、別のアセンブリが特定のバージョン以上を要求できます。JavaEEのでは、ところで、いくつかのクラス・ローダーのレベルを持っている、あなたが同様のバージョン管理

+0

しかし、同じVM内に同じアセンブリの異なるバージョンを持つことをサポートしていますか? –

5

私も10年以上のJavaを使用してきたシミュレートするいくつかのトリックを行うことができますが、私は多くのJAR地獄を発見していないと言わざるを得ないすべてのサードパーティのツールを使用しても問題はありません。私はMavenが恐ろしいツールであることが分かったので、すべてをantでビルドしてください。弊社で

我々はどちらかapplib(あなたがlibのみに依存すべきであるとして、各プロジェクトを定義するとともに、各プロジェクトのための単純な(小)の依存ファイルに基づくオーダーメイド依存解像度antタスクを持っています;決してapp)。それはうまく動作します。

私たちのEclipseの.classpathとIDEA .imlファイルを修正して、私たちのIDEの依存関係グラフを生成する作業もあります。ant

+0

ビルドシステムに組み込む価値があるかもしれません。それは基本的に、残りの部分を投げ捨てながら、mavenの依存関係解決メカニズムを取ります - http://ant.apache.org/ivy/ – Evan

+0

Eclipseにもプラグインがあります - http://ant.apache.org/ivy/ivyde/ – Evan

+0

私は唯一のmaven-haterであるわけではないので、嬉しいです... –

0

Webサーバー上にあるjarファイルを実行し、jarファイルのすべてのネストされたコピーを見つけるツールと、同じ名前の別のファイル(例:version log4j.jarの)。それはの中にWebLogic jar を持っていた1つのWARを含めて、ひどい混乱でした。

解決策が不明です。

何か:java にはがあります。これは、パッケージ版のスタンプ付きjarファイルです。特に:webstart。ウェブスタート型のことをするクラスローダーが必要なのかもしれません。

about:JARマニフェストでは、よく知られている名前とバージョンを使用して、ライブラリの依存関係を指定します。コンテナまたはランタイムによって提供されるクラスローダーは、必要なバージョンを取得する責任があります。

ライブラリをダウンロードするためのよく知られた場所やfinkなどを管理するためのシステム(例:Maven自体)がたくさんあります。

関連する問題