我有一个预先构建的资源适配器档案(*.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一起提供。
答案 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