Patch/Merge Plugin.properties 파일 Plugin을 사용하여 Fragment를 사용합니다.
문제
내 플러그인 de.support.help는 플러그인 .properties 파일입니다. 이 속성 파일에는 기본 설정 페이지의 문자열이 포함됩니다.
이 플러그인을 다른 고객에게 사용하고 싶지만 고객 이름은 속성 파일 내부에 있습니다.
Eclipse Fragment 메커니즘을 사용하여 속성 파일을 패치하고 싶습니다. 지금까지 Fragment 플러그인은 런타임에 Coresponding 플러그인을 패치 할 수 있습니다.
플러그인 de.support.help에 파일 플러그인이 있습니다.
plugin.name = Copyright XYZ
그리고 파일 플러그인을 포함하는 fragemt de.support.help.fragment가 있습니다.
plugin.name = Copyright ABC
런타임에 문자열 "Copyright ABC"가 표시되지만 그렇지 않습니다. 나는 오래 전에 Java 클래스와 동일하게 테스트했으며 그의 일이 효과가 있다는 것을 기억합니다. 조각의 Java 코드는 원래 플러그인에 배치되었습니다.
이것을 처리 할 아이디어가 있습니까? 아니면 조각 메커니즘을 오해합니까?
감사
편집하다:
de.support.help 플러그인에서 plugin.properties 파일을 제거하면 예상대로 작동합니다. 조각 파일은 플러그인 디렉토리에 복사되며 런타임에 사용됩니다.
아니면 Somce Eclipse 클래스를 패치해야합니까? CAN_FRAGMENTS_BE_OUD_TO_PATCH_A_A_PLUG
해결책 2
내가 구현 한 솔루션은 같습니다
먼저 특수 조각 속성 파일을 찾고 기본 속성 파일을 찾는 것보다.
코드는 (번들 이름이 변경되었습니다)
public final class FrameworkMessages {
private static final String BUNDLE_NAME = "de.rts.messages"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private static final String BUNDLE_FRAGMENT_NAME = "de.rts.fragment"; //$NON-NLS-1$
private FrameworkMessages() {
}
public static String getString(String key) {
try {
return ResourceBundle.getBundle(BUNDLE_FRAGMENT_NAME).getString(key);
} catch (MissingResourceException e) {
// Use messages in this plugin when no external fragment files can found
}
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
public static String getString(String pKey, Object[] pArgument) {
try {
return MessageFormat.format(RESOURCE_BUNDLE.getString(pKey), pArgument);
} catch (MissingResourceException e) {
return '!' + pKey + '!';
}
}
}
다른 팁
에 따르면 Eclipse 플러그인을 국제화하는 방법 기사
플러그인 조각은 대상 플러그인에 대한 추가 기능을 제공합니다.
런타임에 이러한 플러그인 기여는 모든 종속 조각과 함께 병합됩니다.이러한 기여에는 속성 및 HTML 파일과 같은 플러그인과 관련된 리소스의 코드 기여 및 기여가 포함될 수 있습니다.
즉, 플러그인은 플러그인의 클래스 로더를 통해 Fragment의 내용에 액세스 할 수 있습니다.
Eclipse 플랫폼은 플러그인 조각을 조각화의 런타임 요소가 원래 대상 플러그인을 보강하는 방식으로 병합합니다.
대상 플러그인은 어떤 식 으로든 이동, 제거 또는 수정되지 않습니다.Fragment의 리소스는 클래스 로더가 위치하므로 플러그인 개발자는 플러그인의 JAR 파일 또는 Fragments의 JAR 파일 중 하나에서 리소스를로드하는지 여부를 알 필요가 없습니다.
클래스 로더가 감지 된 것으로 생각됩니다 plugin.name
에서 de.support.help
먼저 플러그인 de.support.help.fragment
파편.
이 시점에서, 나는 그것이 이전에 시도 되었기 때문에 그것을 할 수 있는지 확실하지 않습니다 ( Eclipse CheckStyle 플러그인), 많은 성공없이.
파일의 내용을 조각으로 바꿀 수 없습니다. 추가 파일 만 추가하십시오. 클래스, 속성 파일, 이미지 등 모두에 해당됩니다.
이 문제를 해결하기위한 몇 가지 표준 방법이 있습니다.
- 이 고객 특정 정보와 함께 확장 지점을 추가 할 수 있습니다.
- 먼저 특수 파일을 찾을 수 있으며 이번 가을에는 Markus가 수행 한대로 일반 파일로 돌아갑니다.
- 관련 정보가 포함 된 플러그인에 대한 선택적 종속성을 가질 수 있습니다.
나는 또한 대체 알고리즘과 .properties 파일에 속하지 않는 다른 것들 중에서 선택할 수 있기 때문에 마지막 솔루션을 선호합니다.