"Could not import bootstrap model" 尝试使用 Alfresco Maven SDK 打包时

"Could not import bootstrap model" when trying to package with Alfresco Maven SDK

我正在尝试为 Alfresco 社区打包一个带有一些自定义数据列表的 AMP(Alfresco 模块包)。当我启动集成测试时,一切正常,但是当我尝试打包它时,我得到的只是一个包含很多 Spring 异常的错误日志。

主要的例外是:

org.alfresco.service.cmr.dictionary.DictionaryException: 07220001 Could not import bootstrap model

这是我的 boostrap bean:

<bean id="customdatalist-repo.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
    <property name="models">
        <list>
            <value>alfresco/module/${project.artifactId}/model/content-model.xml</value>
        </list>
    </property>
    <!-- LABELS -->
    <property name="labels">
        <list>
            <value>alfresco/module/${project.artifactId}/messages/datalist-model</value>
        </list>
    </property>
</bean>

我正在关注 Alfresco DocsDatalist Development guide

更新 测试结果。

Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 43.469 sec <<< FAILURE! - in customdatalist.demoamp.test.DemoComponentTest
testChildNodesCount(customdatalist.demoamp.test.DemoComponentTest)  Time elapsed: 27.794 sec  <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customdatalist-repo.dictionaryBootstrap' defined in class path resource [alfresco/module/customdatalist-repo/context/bootstrap-context.xml]: Invocation of init method failed; nested exception is org.alfresco.service.cmr.dictionary.DictionaryException: 07220001 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220001 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220000 Failed to compile model 'acmedl:datalistModel'
Caused by: org.alfresco.service.namespace.NamespaceException: URI http://www.alfresco.org/model/datalist/1.0 cannot be imported as it is not defined (with prefix dl

testWiring(customdatalist.demoamp.test.DemoComponentTest)  Time elapsed: 8.805 sec  <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customdatalist-repo.dictionaryBootstrap' defined in class path resource [alfresco/module/customdatalist-repo/context/bootstrap-context.xml]: Invocation of init method failed; nested exception is org.alfresco.service.cmr.dictionary.DictionaryException: 07220003 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220003 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220002 Failed to compile model 'acmedl:datalistModel'
Caused by: org.alfresco.service.namespace.NamespaceException: URI http://www.alfresco.org/model/datalist/1.0 cannot be imported as it is not defined (with prefix dl

testGetCompanyHome(customdatalist.demoamp.test.DemoComponentTest)  Time elapsed: 6.431 sec  <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customdatalist-repo.dictionaryBootstrap' defined in class path resource [alfresco/module/customdatalist-repo/context/bootstrap-context.xml]: Invocation of init method failed; nested exception is org.alfresco.service.cmr.dictionary.DictionaryException: 07220005 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220005 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220004 Failed to compile model 'acmedl:datalistModel'
Caused by: org.alfresco.service.namespace.NamespaceException: URI http://www.alfresco.org/model/datalist/1.0 cannot be imported as it is not defined (with prefix dl

堆栈跟踪。

Running customdatalist.demoamp.test.DemoComponentTest
2016-08-22 14:46:08,655  WARN  [alfresco.util.RuntimeSystemPropertiesSetter] [main] Could not find alfresco-jmxrmi.password on classpath
 2016-08-22 14:46:08,825  INFO  [alfresco.repo.admin] [main] Using database URL 'jdbc:h2:/home/juanjo/Documentos/test-sdk/test-repo/customdatalist-project/customdatalist-repo/alf_data_dev/h2_data/alf_dev;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=10000;MVCC=FALSE;LOCK_MODE=0' with user 'alfresco'.
 2016-08-22 14:46:09,720  INFO  [alfresco.repo.admin] [main] Connected to database H2 version 1.4.190 (2015-10-11)
 2016-08-22 14:46:18,074  INFO  [domain.schema.SchemaBootstrap] [main] Ignoring script patch (post-Hibernate): patch.db-V4.2-metadata-query-indexes
 2016-08-22 14:46:18,074  INFO  [domain.schema.SchemaBootstrap] [main] Ignoring script patch (post-Hibernate): patch.db-V5.1-metadata-query-indexes
 2016-08-22 14:46:31,391  WARN  [context.support.GenericApplicationContext] [main] Exception encountered during context initialization - cancelling refresh attempt
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customdatalist-repo.dictionaryBootstrap' defined in class path resource [alfresco/module/customdatalist-repo/context/bootstrap-context.xml]: Invocation of init method failed; nested exception is org.alfresco.service.cmr.dictionary.DictionaryException: 07220001 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:636)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:934)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:120)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:102)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:246)
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:69)
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:95)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access[=14=]0(ParentRunner.java:58)
    at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at com.tradeshift.test.remote.RemoteTestRunner.run(RemoteTestRunner.java:73)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220001 Could not import bootstrap model 'alfresco/module/customdatalist-repo/model/content-model.xml'
    at org.alfresco.repo.dictionary.DictionaryBootstrap.onDictionaryInit(DictionaryBootstrap.java:173)
    at org.alfresco.repo.dictionary.DictionaryBootstrap.bootstrap(DictionaryBootstrap.java:118)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1640)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1581)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
    ... 42 more
Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 07220000 Failed to compile model 'acmedl:datalistModel'
    at org.alfresco.repo.dictionary.CompiledModel.<init>(CompiledModel.java:116)
    at org.alfresco.repo.dictionary.M2Model.compile(M2Model.java:167)
    at org.alfresco.repo.dictionary.DictionaryDAOImpl.putModelImpl(DictionaryDAOImpl.java:273)
    at org.alfresco.repo.dictionary.DictionaryDAOImpl.putModel(DictionaryDAOImpl.java:260)
    at org.alfresco.repo.dictionary.DictionaryBootstrap.onDictionaryInit(DictionaryBootstrap.java:169)
    ... 50 more
Caused by: org.alfresco.service.namespace.NamespaceException: URI http://www.alfresco.org/model/datalist/1.0 cannot be imported as it is not defined (with prefix dl
    at org.alfresco.repo.dictionary.CompiledModel.createLocalPrefixResolver(CompiledModel.java:214)
    at org.alfresco.repo.dictionary.CompiledModel.constructDefinitions(CompiledModel.java:138)
    at org.alfresco.repo.dictionary.CompiledModel.<init>(CompiledModel.java:96)
    ... 54 more

还有我的content-model.xml

<?xml version="1.0" encoding="UTF-8"?>
<model name="acmedl:datalistModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

    <!-- Optional meta-data about the model -->
    <description>Seyte DataList test</description>
    <author>Juanjo Salvador</author>
    <version>1.0</version>

    <imports>
        <!-- Import Alfresco Dictionary Definitions -->
        <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
        <!-- Import Alfresco Content Domain Model Definitions -->
        <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
        <!-- Import Alfresco Data List Model Definitions -->
        <import uri="http://www.alfresco.org/model/datalist/1.0" prefix="dl" />
    </imports>

    <!-- Custom namespace for the ACME company Data Lists-->
    <namespaces>
        <namespace uri="http://www.acme.org/model/datalist/1.0" prefix="acmedl"/>
    </namespaces>

    <types>
        <!--
            Data List Item Type for the custom project list
            -->
        <type name="acmedl:projectListItem">
            <title>DataList Seyte</title>
            <parent>dl:dataListItem</parent>
            <properties>
                <property name="acmedl:projectName">
                    <type>d:text</type>
                    <mandatory>true</mandatory>
                </property>
                <property name="acmedl:projectDescription">
                    <type>d:text</type>
                </property>
            </properties>
        </type>
    </types>
</model>

这不是最好的方法,但为了寻找解决方法,我决定跳过这些测试,因为我的包无法通过失败的测试进行编译。

解决方案是:

mvn clean
mvn package -Dmaven.test.skip=true

并使用 alfresco-mnt.jar

安装两个包(share 和 repo)
java -jar bin/alfresco-mnt.jar install <repo package> tomcat/webapps/alfresco.war
java -jar bin/alfresco-mnt.jar install <share package> tomcat/webapps/share.war

现在完成了。但请记住,这不是最好的方法