Я пытаюсь создать плагин intellij для компиляции Latex. Я следую этой документации для реализации API внешней сборки. Однако мой класс LatexBuilderService
, который расширяет BuilderService
, не вызывается, когда я нажимаю кнопку "построить проект". Как мне убедиться, что мой LatexBuilderService
запущен правильно?
Под src/main/resources/META-INF/services
я создал файл с именем org.jetbrains.jps.incremental.BuilderService
, который содержит полное имя для моего BuilderService.
В частности, он имеет текст: build.builders.LatexBuilderService
extensions
часть моего plugin.xml
выглядит так
<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>
и подтвердили с помощью операторов печати, что getBuildTargetScopes
в моем LatexBuildScopeProvider
классе, который расширяет BuildTargetScopeProvider
, вызывается всякий раз, когда нажимается кнопка «построить проект».
Классы, которые я продлил
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.
Ни одно из операторов печати или исключений не запускается, когда я нажимаю кнопку "построить проект".
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");
}
}