有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尽管METAINF/services中有条目,但未调用java Intellij插件自定义编译器

我正在尝试创建一个intellij插件来编译Latex。我遵循this documentation实现外部构建API。但是,当我按下“build project”按钮时,不会调用扩展BuilderServiceLatexBuilderService类。如何确保正确调用我的LatexBuilderService

src/main/resources/META-INF/services下,我创建了一个名为org.jetbrains.jps.incremental.BuilderService的文件,其中包含我的BuilderService.的完全限定名,具体来说,它的文本为:build.builders.LatexBuilderService

我的{}的{}部分如下所示

<extensions defaultExtensionNs="com.intellij">
    <compiler.buildTargetScopeProvider implementation="build.scope.LatexBuildScopeProvider"/>
    <compileServer.plugin classpath ="/home/philip/IdeaProjects/latex-compile-proof-of-concept/build/libs/latex-compile-1.0-SNAPSHOT.jar" />
</extensions>

并已使用print语句确认,每当按下“build project”按钮时,将调用扩展BuildTargetScopeProvider的my LatexBuildScopeProvider类中的getBuildTargetScopes

我延长了课程

  • LatexBuilder扩展TargetBuilder<LatexBuildRootDescriptor, LatexBuildTarget>
  • LatexBuilderService扩展BuilderService
  • LatexBuildScopeProvider扩展的BuildTargetScopeProvider
  • LatexBuildRootDescriptor扩展BuildRootDescriptor
  • LatexBuildTarget扩展BuildTarget<LatexBuildRootDescriptor>
  • LatexBuildTargetType扩展BuildTargetType<LatexBuildTarget>

这是我的LatexBuildScopeProvider代码

public class LatexBuildScopeProvider extends BuildTargetScopeProvider {
    @NotNull
    @Override
    public List<TargetTypeBuildScope> getBuildTargetScopes(@NotNull CompileScope baseScope,
                                                           @NotNull Project project,
                                                           boolean forceBuild) {
        System.out.println("getBuildTargetScopes was called");

        Stream<Module> modules = Arrays.stream(baseScope.getAffectedModules());
        List<String> moduleIds = modules.map(Module::getName).collect(Collectors.toList());

        TargetTypeBuildScope scope = CmdlineProtoUtil.createTargetsScope(
                LatexBuildTargetType.instance.getTypeId(),
                moduleIds, // Sometimes referred to as module names in other plugins
                forceBuild);
        return Collections.singletonList(scope);
    }
}

和我的LatexBuilderService.代码当我按下“buildproject”按钮时,不会触发任何打印语句或异常

public class LatexBuilderService extends BuilderService {
    @NotNull
    @Override
    public List<LatexBuildTargetType> getTargetTypes() {
        System.out.println("calling getTargetTypes");
        return Collections.singletonList(LatexBuildTargetType.instance);
    }

    @NotNull
    @Override
    public List<LatexBuilder> createBuilders() {
        System.out.println("calling createBuilders");
        return Collections.singletonList(new LatexBuilder());
    }

    @NotNull
    @Override
    public List<? extends ModuleLevelBuilder> createModuleLevelBuilders() {
        throw new NotImplementedException("createModuleLevelBuilders");
    }
}

共 (1) 个答案

  1. # 1 楼答案

    插件开发和IntelliJ IDEA API问题的最佳位置是dev forum

    你的问题就在那里,我会在论坛上继续讨论,因为在这种情况下更方便