1

いくつかのルーチン コードを生成するための簡単なプラグインを開発しました。このプラグインは、Package Explorer のポップアップ メニューに貢献しています。開発環境 ( Launch as Eclipse applicationEclipse RCP から) から実行すると、意図したとおりに動作します。適切なメニュー項目がメニューに表示され、その呼び出しが期待どおりに行われます。

ただし、別の Eclipse インスタンスにデプロイするのに苦労しています。

開発したプラグインは、別の jar ファイルを生成するエクスポート ウィザードでエクスポートされました。この jar ファイルは、別の Eclipse インストール (新しくアンパッケージされたもの) の dropings ディレクトリに配置されています。この Eclipse インスタンスが起動すると、Package Explorer のポップアップ メニューには提供されたメニュー項目が含まれません。Eclipse インストールの詳細からの情報は、プラグインが [プラグイン] タブに存在し、[構成] タブに としてリストされていることを示していますtg.companion (1.0.0.201208132302) "Companion Object Generator" [Starting]

私は何が欠けていますか?提供されたメニュー項目が表示されないのはなぜですか?

ありがとう。


locationURIメニュー貢献度の は、popup:org.eclipse.jdt.ui.PackageExplorerプロパティの値allPopupsは ですtrue

プラグインは署名されていません。


これは、いくつかの光を当てる可能性のあるプラグインファイルです。

Plugin.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="true"
            locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
         <command
               commandId="tg.companion.handler.generator"
               label="TG Create Companion Object"
               style="push"
               tooltip="Creates a companion object to the selected entity object, and provides DAO/RAO implementations">
         </command>
      </menuContribution>
   </extension>
   <extension point="org.eclipse.ui.commands">
      <command
            defaultHandler="tg.companion.handler.GenerateCompanionObjects"
            id="tg.companion.handler.generator"
            name="Generate Comanion">
      </command>
   </extension>
</plugin> 

マニフェスト.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Companion Object Generator
Bundle-SymbolicName: tg.companion;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: tg.companion.Activator
Bundle-Vendor: TG
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 org.eclipse.jdt.core;bundle-version="3.8.1",
 org.eclipse.core.resources;bundle-version="3.8.0",
 org.eclipse.core.expressions;bundle-version="3.4.400"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy

コマンド ハンドラ:

package tg.companion.handler;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;

public class GenerateCompanionObjects extends AbstractHandler implements IHandler {

    @Override
    public Object execute(final ExecutionEvent event) throws ExecutionException {
        final Shell shell = HandlerUtil.getActiveShell(event);
        final ISelection sel = HandlerUtil.getActiveMenuSelection(event);
        final IStructuredSelection selection = (IStructuredSelection) sel;

        final Object firstElement = selection.getFirstElement();
        if (firstElement instanceof ICompilationUnit) {
            createOutput(shell, (ICompilationUnit) firstElement);
        } else {
            MessageDialog.openWarning(shell, "Companion Object Generation Warning", "Please select an entity object for generating a corresponding companion.");
        }
        return null;
    }

    private void createOutput(final Shell shell, final ICompilationUnit cu) {
         // does code generation work using Java Model
    }

}
4

1 に答える 1

2

最後に、問題は解決されました!

プロジェクト構造を注意深く確認した結果、(何らかの理由で) build.properties ファイルで plugin.xml がチェックされていないことが判明しました。その結果、エクスポート ウィザードによって生成された jar ファイルに plugin.xml が含まれていませんでした。

build.properties ファイルが修正され、plugin.xml が含まれるようになると、結果の jar ファイルに問題なく含まれてデプロイされました。

興味深いことに、プラグイン エクスポート ウィザードは、個人的に予想していた plugin.xml の除外について警告さえしませんでした。

于 2012-08-21T15:23:57.587 に答える