我遇到与安装包含Annotator组件的UIMA PEAR包有关的问题。我正在使用PearPackageMavenPlugin进行以下设置:
<plugin>
<groupId>org.apache.uima</groupId>
<artifactId>PearPackagingMavenPlugin</artifactId>
<version>2.6.0</version>
<extensions>true</extensions>
<executions>
<execution>
<phase>package</phase>
<configuration>
<!-- PEAR file component classpath settings -->
<classpath>$main_root/bin</classpath>
<!-- PEAR file main component descriptor -->
<mainComponentDesc>desc/S4DocumentUimaAnnotator.xml</mainComponentDesc>
<!-- PEAR file component ID -->
<componentId>S4DocumentAnnotator</componentId>
<!-- PEAR file UIMA datapath settings -->
<datapath>$main_root/resources</datapath>
</configuration>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
`
我构建了一个特殊的maven配置文件,在bin目录中构建项目而不是target,所以我所有编译的类都在那里,这就是我在$ main_root / bin中指向插件的类路径设置的原因。
最后,当我加载构建的pear包时,我收到以下错误:
Verification of S4DocumentAnnotator failed =>
org.apache.uima.resource.ResourceInitializationException: The class com.ontotext.s4.api.components.uima.S4DocumentUimaAnnotator is not a valid Analysis Component. You must specify an Annotator, CAS Consumer, Collection Reader, or CAS Multiplier. If you are calling ResourceManager.setExtensionClassPath, this error can also be caused if you have put UIMA framework jar files on the extension classpath, which is not allowed. (Descriptor: file:/home/ceco/s4_stuff/my_pear/S4DocumentAnnotator/desc/S4DocumentUimaAnnotator.xml)
at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.initializeAnalysisComponent(PrimitiveAnalysisEngine_impl.java:228)
at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.initialize(PrimitiveAnalysisEngine_impl.java:170)
at org.apache.uima.impl.AnalysisEngineFactory_impl.produceResource(AnalysisEngineFactory_impl.java:94)
at org.apache.uima.impl.CompositeResourceFactory_impl.produceResource(CompositeResourceFactory_impl.java:62)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:279)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:331)
at org.apache.uima.UIMAFramework.produceAnalysisEngine(UIMAFramework.java:448)
at org.apache.uima.pear.tools.InstallationTester.testAnalysisEngine(InstallationTester.java:218)
at org.apache.uima.pear.tools.InstallationTester.doTest(InstallationTester.java:113)
at org.apache.uima.pear.tools.InstallationController.verifyComponentInstallation(InstallationController.java:1110)
at org.apache.uima.pear.tools.InstallationController.verifyComponent(InstallationController.java:1993)
at org.apache.uima.tools.pear.install.InstallPear.installPear(InstallPear.java:389)
at org.apache.uima.tools.pear.install.InstallPear.access$000(InstallPear.java:80)
at org.apache.uima.tools.pear.install.InstallPear$RunInstallation.run(InstallPear.java:109)
at java.lang.Thread.run(Thread.java:744)
我不明白为什么当PEAR包的想法是自包含的并且不依赖于它运行的系统时,不应该打包UIMA罐?
答案 0 :(得分:3)
这就是我想要的:
com.ontotext.s4.api.components.uima.S4DocumentUimaAnnotator类不是有效的分析组件
检查S4DocumentUimaAnnotator是否有效。解压缩PEAR并检查xml。
如果您正在调用ResourceManager.setExtensionClassPath,如果您已将UIMA框架jar文件放在扩展类路径上,也可能导致此错误,这是不允许的。
您是否尝试打印扩展类路径?
否则你可以尝试使用普通的Java版本的PEAR,这意味着:手动解压缩它并用它创建一个普通的java项目。
答案 1 :(得分:1)
我遇到过几次遇到的一个常见问题就是我的PEAR在lib文件夹中包含了uimaj-common.jar。你看过这个吗?
答案 2 :(得分:1)
我知道这个是旧的,但我认为你应该做的是将uima依赖的范围设置为provided
。 PEAR只需要运行它的依赖项,它将被使用的环境应该将uima依赖项设置为使用所有uima功能和梨
提供的依赖项不会被复制到PEAR的lib文件夹
答案 3 :(得分:0)
有一些事情可能会发生,但是根据您的错误消息,我要确定的第一件事是,uimaj-core
jar文件是否被排除在PEAR文件的构建之外。它应该是。 (看看上面的错误信息。)我自己遇到了这个问题,我把它添加到我的POM中解决了这个问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<!-- Copy the dependencies to the lib folder for the PEAR to copy. -->
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<stripVersion>true</stripVersion>
<outputDirectory>${basedir}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<includeScope>runtime</includeScope>
<!-- An exception happens when using a PEAR if the archive includes this jar. -->
<excludeArtifactIds>uimaj-core</excludeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
我最近在我的Gist上发布了父POM文件和项目特定的POM文件。欢迎你来看看我在做什么。 (我正在做的一件事是将我的desc
目录(包含我的AE的描述符XML文件)复制到我的项目目录的根目录,以便maven-pear插件可以将其复制到PEAR存档中正常。)
父POM:
https://gist.github.com/software-mariodiana/d46e10fca53dc6e6c0f16e20563476b8
项目特定的POM:
https://gist.github.com/software-mariodiana/e9a0f0f03a49d33dcc32655170fd4841
祝你好运!