2011-07-14 2 views
4

Я пытаюсь использовать Cruise Control preprocessor functionality, чтобы разбить мою конфигурацию на более мелкие разделы многократного использования. Я могу использовать включать функцию большой внутри корневого узла CruiseControl, например, так:Ошибка CruiseControl «Неиспользуемый узел обнаружена» при добавлении xmlns в узел проекта

<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
    <cb:include href="child.config" /> 
</cruisecontrol> 

Если я пытаюсь использовать другой включить в детской конфигурации (вроде так):

<project name="TestProject" xmlns:cb="urn:ccnet.config.builder">  
    <cb:include href="grandchild.config" /> 
</project> 

Я получаю следующее сообщение об ошибке:

ThoughtWorks.CruiseControl.Core.Config.ConfigurationException: Unused node detected: xmlns:cb="urn:ccnet.config.builder"

Если я удалю заявление XMLNS пространства имен, я получаю эту ошибку вместо:

ThoughtWorks.CruiseControl.Core.Config.ConfigurationException: The configuration file contains invalid xml: E:\Build\Config\AppRiver.Tools.BuildAutomation\CruiseControl\ccnet.config ---> System.Xml.XmlException: 'cb' is an undeclared namespace.

И, наконец, если удалить префикс «куб» на бирке, я получаю эту ошибку

Unused node detected:  Unused node detected: <define buildFile="CP.WEB.Dev.SanityCheck.CI.build" /> 

Я из идей - любая помощь приветствуется!

+0

Пожалуйста, покажите свой файл grandchild.config. Кроме того, вы попробовали проверить свою конфигурацию с включенным валидатором? – skolima

+0

Мне пришлось добавить xmlns для каждого include и define tag и создать собственное пространство имен для каждого! Например: . Не хорошо. Я нахожу, что CruiseControl отлично работает, когда вся конфигурация находится в одном файле, но очень сложно разделить ее, чтобы обслуживать очень большие проекты и несколько команд. Я не помещаю это в качестве ответа, поскольку, надеюсь, кто-то приходит с лучшим! – James

+0

skolima - чтобы ответить на ваш вопрос, содержание внука для моего тестирования предназначено, только раздел «издателей» конфигурации CC. Нет, я не тестировал включенный валидатор - не знаю, как это сделать. Будет следить. – James

ответ

0

Круиз-контроль выдает сообщение об ошибке, если xmlns помещается в тег проекта. Кажется, это ошибка. Я теперь отошел от Круиз-контроля и на Хадсон, и очень доволен этим.

0

Попробуйте удалить включенный внук из тегов проекта. Кроме того, мы включаем xmlns: cb = "urn: ccnet.config.builder" в нашем теге Include.

<cb:include href="grandchild.config" xmlns:cb="urn:ccnet.config.builder"/> 
+0

Я не хочу удалять тег grandchild из тега проекта, так как моя цель состоит в том, чтобы разделить разные разделы, чтобы они могли быть повторно использованы в конфигурациях (например, в разделе издателей). Если я включаю XMLNS в тег include, он жалуется, что я использую другой тег с теми же xmlns в одном документе. Я могу создавать разные пространства имен для каждого, но это не очень удобно, и немного взломать. – James

+0

Я думаю, что проблемы в том, что CC видит XMLNS как атрибут, о котором он не знает, и взрывается. Мне это кажется ошибкой. – James

4

Для использования <cb:include> тег <cb:include> должен иметь пространство имен xml. И включенные файлы должны начинаться с элемента с указанным в нем пространством имен xml. Это в документации, но легко пропустить.

<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
    <cb:include href="projectFile.xml" xmlns:cb="urn:ccnet.config.builder"/> 
</cruisecontrol> 

projectFile.xml

<cb:config-template xmlns:cb="urn:ccnet.config.builder"> 
    <project> 
     ... 
    </project> 
</cb:config-template> 

Кроме того, если вы хотите добавить информацию о версии CCNET как отмечено here, вам необходимо включить это пространство имен в включаемого файла, а также.

Так ccnet.config выглядит следующим образом:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder" xmlns="http://thoughtworks.org/ccnet/1/8"> 
    <cb:include href="projectFile.xml" xmlns:cb="urn:ccnet.config.builder"/> 
</cruisecontrol> 

и изменения projectFile.xml в

<cb:config-template xmlns:cb="urn:ccnet.config.builder" xmlns="http://thoughtworks.org/ccnet/1/8"> 
    <project> 
     ... 
    </project> 
</cb:config-template> 
1

Это не обязательно проблема с тем, как вы в том числе файл. Это более общая ошибка. Я столкнулся с проблемой, когда случайно потерял тег в инструкции управления версиями.

Я думаю, что он используется для обозначения XML-вставили не был понят элемент, который вы пытались использовать его в

я случайно имел это (который работает для нескольких управления версиями):

<cb:define name="Hg"> 
    <repo>$(repo)</repo> 
    <executable>$(hgExePath)</executable> 
    <branch>default</branch> 
    <workingDirectory>$(dir)</workingDirectory> 
</cb:define> 

Привыкнув во что-то вроде этого:

<cb:define name="SourceControl"> 
    <sourcecontrol type="hg"> 
     <cb:Hg repo="$(repo)" dir="." /> 
    </sourcecontrol> 
</cb:define> 

Поскольку SourceControl (родной CCNET один) уже с указанием типа = «рт.ст.» он не ожидал увидеть элемент рт.ст.

Смежные вопросы