我正在尝试创建一个intellij插件来编译Latex。我正在关注this documentation以实现External Build 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);
}
}
插件开发和IntelliJ IDEA API问题的最佳位置是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");
}
}
那里,我会在论坛继续讨论,因为在这种情况下更方便。