如果我错了,请纠正我,但以编程方式创建 CProject 定义是不好的魔力。然后,我的答案将是使用“标准”plugin.xml + Activator 模型(例如当您从模板创建新插件项目时)。
我认为您正在寻找一个 IErrorParser,它可以解析您的 BAT 文件的输出。
MyExErrorParser.java
import org.eclipse.cdt.core.*
import org.eclipse.core.resources.*;
public class MyExErrorParser implements IErrorParser {
public MyExErrorParser() {
}
@Override
public boolean processLine(String line, ErrorParserManager eoParser) {
IProject p = ResourcesPlugin.getWorkspace().getRoot()
.getProject("hello_world");
p.getFile("main.c");
if(line.contains("my_error_id_str")) {
int err_lvl = IMarkerGenerator.SEVERITY_ERROR_RESOURCE;
ProblemMarkerInfo marker = new ProblemMarkerInfo(p , 5, "bad",
err_lvl,
"foo");
eoParser.addProblemMarker(marker);
return true;
}
return false;
}
}
理想的
当' processLine() '被调用时,你有机会检查环境变量 %ERRORLEVEL%(或 $? 在 linux 中)
建议的
- 只需将 %ERRORLEVEL% 检查添加到您需要的 BAT 文件中。如果 ERRORLEVEL >0,则输出一条消息“my_error_id_str。那么上面的 IErrorParser 很容易评估它。
补充
这是一个练习上述代码的工具链。此示例调用一个 shell 脚本作为其构建命令,不带任何参数。我认为这可能是你最终追求的更多?无论哪种方式,扩展/维护都比您使用的编程实现容易很多倍。
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.cdt.managedbuilder.core.buildDefinitions">
<projectType
buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe"
id="Toolchain.projectType1"
isAbstract="false"
name="Justin">
<configuration
artifactExtension="o"
buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe"
cleanCommand="rm -rf"
id="Toolchain.configuration1"
name="Debug">
<toolChain
errorParsers="exErrorParser"
id="Toolchain.toolChain1"
isAbstract="false"
name="Example Toolchain"
supportsManagedBuild="true"
targetTool="Toolchain.tool1">
<builder
command="make"
errorParsers="exErrorParser"
id="Toolchain.builder1"
isAbstract="false"
isVariableCaseSensitive="false"
name="Builder">
</builder>
<tool
command="/home/jmreina/example.sh
commandLinePattern="${COMMAND}"
errorParsers="exErrorParser"
id="Toolchain.tool1"
isAbstract="false"
name="Example Tool">
<inputType id="Toolchain.inputType1" multipleOfType="false" primaryInput="true" sources="c"></inputType>
<outputType id="Toolchain.outputType1" outputs="txt" primaryOutput="true"></outputType>
</tool>
</toolChain>
</configuration>
</projectType>
</extension>
<extension
id="id1"
name="name"
point="org.eclipse.cdt.core.ErrorParser">
<errorparser
class="MyExErrorParser"
id="exErrorParser"
name="MyExParserName">
</errorparser>
</extension>
</plugin>