Получить возвращаемое значение конфигурации сборки

Я создаю плагин 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>
Другие вопросы по тегам