部署预构建的资源适配器存档作为企业应用程序项目的一部分

时间:2018-07-16 11:41:51

标签: java-ee netbeans glassfish netbeans-8 glassfish-4.1

我有一个预先构建的资源适配器档案(*.rar)文件,我需要将其作为Netbeans Enterprise Application项目的一部分。

Build > Packaging的项目属性中,我添加了此*.rar文件并将Location In Archive设置为根(/)。

还有一个EJB模块项目,它使用*.rar中的类。当我构建*.ear文件并将其手动部署到Glassfish时,一切都很好,我什至不必编写application.xml

但是,当我从Netbeans部署应用程序项目时,我的EJB无法访问*.rar中的类并抛出NoClassDefFoundError。如果我将文件application.xml放入src/conf/,则从Netbeans部署失败,并显示以下信息:

IllegalArgumentException: Expected to find an expanded directory for submodule my.rar but found a JAR.  If this is a directory deployment be sure to expand all submodules.

application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>EnterpriseApplication1</display-name>
  <module>
    <connector>my.rar</connector>
  </module>
  ...
</application>

如何在部署时使Netbeans解压缩rar?

通常如何使用Netbeans开发资源适配器(不是预构建的本机项目,不是Maven)?我没有看到这样的模板。

我的Netbeans 8.2与Glassfish 4.1.1一起提供。

1 个答案:

答案 0 :(得分:0)

我发现Netbeans构建脚本使用<nbdeploy>任务来清理,准备和部署dist/gfdeploy/Appname目录。此任务从${build.dir}复制所有内容,因此应该可以在pre-run-deploy钩子中解压缩rar。

复制后,<nbdeploy>解压缩jar文件,但不解压缩rar文件。将罐子解压缩到同名的子目录中,只有后缀{{1}被替换为.jar

_jar目标仅在从Netbeans运行时(设置了<nbdeploy>时)才调用-run-deploy-nb任务。

知道了这一点,我在${netbeans.home}中添加了pre-run-deploy钩子:

build.xml

实际上,我的目标要复杂得多,因为我想扩展<target name="pre-run-deploy" if="netbeans.home"> <fileset dir="${build.dir}" id="nth.archive"> <include name="my.rar"> </fileset> <pathconvert property="extract.dir" refid="nth.archive"> <!-- replace last dot with underscore --> <mapper type="regexp" from="(.*)[.](.*)" to="\1_\2" /> </pathconvert> <delete dir="${extract.dir}"/> <unzip dest="${extract.dir}"> <resources refid="nth.archive"/> </unzip> <delete> <fileset refid="nth.archive"/> </delete> </target> 中与${build.dir}模式匹配的每个文件。完整的*.rar在这里:https://gist.github.com/basinilya/c2c1ad3fc0df2323fc5c5337c19648bb