コンスタンティンの答えは基本的に正しいですが、不完全です。これがより完全な答えです。
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);
}
}
}
この抜粋が持ち上げられた完全なコードはこちら