Получить возвращаемое значение конфигурации сборки
Я создаю плагин CDT eclipse с определенной конфигурацией сборки. Я использую setBuildCommand()
а также setBuildArguments()
функции, которые вызывают пакетный файл.
Мой текущий код:
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
ICProjectDescription des = mngr.createProjectDescription(project, false);
ManagedProject mProj = new ManagedProject(des);
Configuration cfg = new Configuration(mProj, null, "my.configuration.id", "MyConfiguration");
cfg.setBuildCommand("script.bat");
cfg.setBuildArguments(arg1 + " " + arg2);
Я хотел бы получить код возврата из этого командного файла, но я не могу найти способ его получить.
Любая идея? Может быть, вы знаете, как добавить маркер в проект, который будет содержать информацию?
1 ответ
Поправьте меня, если я ошибаюсь, но программное создание определения CProject - это плохо для mojo. Тогда мой ответ будет с использованием "стандартной" модели 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 () ', у вас есть возможность проверить среду var %ERRORLEVEL% (или $? в linux)
Я не могу понять, как получить карту *currentBuilder.*Environment(), которую вы бы использовали, чтобы проверить это. Но ваш вар должен быть там
Я предполагаю, что путь Environment () - это огромная дыра времени, которую нужно попытаться выяснить. XXX
Предложил
- просто добавьте чек%ERRORLEVEL% в BAT-файл там, где он вам нужен. Если ERRORLEVEL >0, выведите сообщение "my_error_id_str. Тогда вашему IErrorParser будет очень легко его оценить.
дополнительный
Вот набор инструментов, который осуществляет приведенный выше код. В этом примере в качестве команды сборки вызывается сценарий оболочки без аргументов. Я думаю, что это может быть больше того, что вы в конечном итоге после? В любом случае, будет намного проще расширять / поддерживать, чем программную реализацию, которую вы использовали.
<?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>