尽管METAINF/services中有条目,但未调用java Intellij插件自定义编译器
我正在尝试创建一个intellij插件来编译Latex。我遵循this documentation实现外部构建API。但是,当我按下“build project”按钮时,不会调用扩展BuilderService
的LatexBuilderService
类。如何确保正确调用我的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 楼答案
插件开发和IntelliJ IDEA API问题的最佳位置是dev forum
你的问题就在那里,我会在论坛上继续讨论,因为在这种情况下更方便