かとじゅんの技術日誌

技術の話をするところ

ExecutionEnvironmentがInstallされているVMに勝手に切り替わる件

の続報ですが、
私もEclipseプラグインの初心者でしたが、プラグインプロジェクトを構成して、デバッグまでできるようになりました。ははは。

MavenCompilerPluginHandlerで、
maven-compiler-pluginで指定されているVMのバージョンにマッチするInstallされているVMに切り替えている模様。
MavenCompilerPluginHandler#getJREContainersMapメソッドでJavaRuntime#newJREContainerPath(IVMInstall vm) というメソッドでMapを作っているので、これはバグというか仕様かもしれません。newJREContainerPath(IExecutionEnvironment environment)は使われてないようです。

    private Map<String, IClasspathEntry> getJREContainersMap()
    {
        Map<String, IClasspathEntry> jreContainers = new HashMap<String, IClasspathEntry>();

        jreContainers.put( getJREVersion( JavaRuntime.getDefaultVMInstall() ),
                           JavaRuntime.getDefaultJREContainerEntry() );
        for ( IVMInstallType installType : JavaRuntime.getVMInstallTypes() )
        {
            for ( IVMInstall install : installType.getVMInstalls() )
            {
                String version = getJREVersion( install );
                if ( !jreContainers.containsKey( version ) )
                {
                    jreContainers.put( version, JavaCore.newContainerEntry( JavaRuntime.newJREContainerPath( install ) ) );
                }
            }
        }

        return jreContainers;
    }

そもそも、JREContainerPathを組み立て直さないといけない理由がわからないのですが、現状のJREContainerPathを維持するような処理にできないかなーと。時間があったら考えてみよう。