康斯坦丁的答案基本上是正確的,但不完整。這是一個更完整的答案。
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文件只包含,而不是它裏面的資源,以容器的引用。如果是這樣,我仍然認爲它不會有幫助,因爲我想陷入困境的情況是,例如,容器中的罐子保留相同的名稱,但改變了內容,例如更新Maven快照依賴關係。 – matthewSpleep 2012-04-16 12:50:47