문제

내 플러그인 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 파일에 속하지 않는 다른 것들 중에서 선택할 수 있기 때문에 마지막 솔루션을 선호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top