我有一个使用第三方库的 UIMA AS 应用程序。我想知道以下内容: 1. 我们可以在哪里(位置)添加这些第三个库,以便部署的应用程序能够意识到它们并且不会抛出“ClassNotFoundException”?对我来说,一个蛮力解决方案是将它们直接添加到 UIMA AS“lib/”文件夹中,但该解决方案仅用于测试,在生产中是不可接受的。2. 在生成 PEAR 文件时如何设置这个第三方库,以便部署应用程序会考虑它们并且不需要手动将它们添加到类路径中?
我会期待你的答复。谢谢你。
我有一个使用第三方库的 UIMA AS 应用程序。我想知道以下内容: 1. 我们可以在哪里(位置)添加这些第三个库,以便部署的应用程序能够意识到它们并且不会抛出“ClassNotFoundException”?对我来说,一个蛮力解决方案是将它们直接添加到 UIMA AS“lib/”文件夹中,但该解决方案仅用于测试,在生产中是不可接受的。2. 在生成 PEAR 文件时如何设置这个第三方库,以便部署应用程序会考虑它们并且不需要手动将它们添加到类路径中?
我会期待你的答复。谢谢你。
对于第一个问题:我的方法是 1. 为第三个库创建一个 lib 文件夹 2. 创建一个脚本,将 lib 文件夹添加到 UIMACLASSPATH
@set UIMA_CLASSPATH=%UIMA_CLASSPATH%;../../lib;../../bin 为第二个问题调用 deployAsyncService.cmd:我使用 maven 插件生成 pear 文件。
摘自 pom.xml(maven 相关)
<plugins>
<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>
<outputDirectory>${basedir}/lib</outputDirectory>
<overWriteSnapshots>true</overWriteSnapshots>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.uima</groupId>
<artifactId>PearPackagingMavenPlugin</artifactId>
<version>2.3.1</version>
<!-- if version is omitted, then -->
<!-- version is inherited from parent's pluginManagement section -->
<!-- otherwise, include a version element here -->
<!-- says to load Maven extensions (such as packaging and type
handlers) from this plugin -->
<extensions>true</extensions>
<executions>
<execution>
<configuration>
<classpath>
<!-- PEAR file component classpath settings -->
$main_root/lib/*.jar
</classpath>
<mainComponentDesc>
<!-- PEAR file main component descriptor -->
</mainComponentDesc>
<componentId>
<!-- PEAR file component ID -->
${project.artifactId}
</componentId>
<datapath>
<!-- PEAR file UIMA datapath settings -->
$main_root/
</datapath>
</configuration>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<!-- Clean the libraries after packaging -->
<execution>
<id>CleanLib</id>
<phase>clean</phase>
<configuration>
<tasks>
<delete quiet="false" failOnError="false">
<fileset dir="${basedir}/lib" includes="**/*.jar" />
</delete>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
您可以从外部 jar 中提取已编译的类并将它们打包到您的 UIMA 组件 jar 中。至于 PEAR 文件,您可能会发现类似的方法有效(解压 pear,添加 .class 文件,重新打包)