コンスタンチンの答えは基本的に正しいが不完全です。ここでより完全な答えがあります。
1)IJavaElementChangeListeneを登録し、 'POST_CHANGE_EVENTS'をリッスンします。 (コンスタンチンの例を参照)。
2)あなたはダウンIJavaProjectレベルにデルタを歩くと、フラグがIJavaElementDelta.F_CLASSPATH_CHANGEDまたは設定IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED持っ イベントを探して変更イベントを受け取ります。このコードスニペットのように:
class MyListener implements IElementChangedListener {
@Override
public void elementChanged(ElementChangedEvent event) {
visit(event.getDelta());
}
private void visit(IJavaElementDelta delta) {
IJavaElement el = delta.getElement();
switch (el.getElementType()) {
case IJavaElement.JAVA_MODEL:
visitChildren(delta);
break;
case IJavaElement.JAVA_PROJECT:
if (isClasspathChanged(delta.getFlags())) {
notifyClasspathChanged((IJavaProject)el);
}
break;
default:
break;
}
}
private boolean isClasspathChanged(int flags) {
return 0!= (flags & (
IJavaElementDelta.F_CLASSPATH_CHANGED |
IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED
));
}
public void visitChildren(IJavaElementDelta delta) {
for (IJavaElementDelta c : delta.getAffectedChildren()) {
visit(c);
}
}
}
この抜粋が解除された完全なコードがhere
残念ながら、クラスパスの容器の場合には.classpathファイルには、容器のみではなく、ITリソースの内部への参照が含まれています。それができたなら、私が罠に掛けたいと思うように助けてくれるとは思わない。コンテナ内のジャーは同じ名前を保持するが、コンテンツを変更する。 Mavenスナップショットの依存関係を更新します。 – matthewSpleep