liuxiaoyun111 发表于 2017-3-2 12:24:59

eclipse下maven项目保持原有目录结构配置resin运行环境

  maven项目用起来很方便,但是它的目录结构和eclipse的目录结构是有区别的,故而在eclipse下的maven项目,直接运行调试是有一些问题的.
  为了方便maven项目的运行调试,因而也就有了像tomcat-maven-plugin,jetty-maven-plugin这类maven插件,不使用eclipse的运行,而直接在maven中运行这类插件是一点问题没有的,调试使用都很方便.但是resin这个容器在maven下的插件就不怎么样了,而且也不再有维护支持了.此时就只能使用eclipse的原始的运行调试命令了.
  这里有几个小细节要先清楚(以web项目来说):
  1.maven项目使用package命令是直接将class文件放到target目录下的.
  eclipse的项目,class文件是根据项目中鼠标右键-buildpath中配置的路径存放.
  2.maven项目的web根路径是src/main/webapp下
  eclipse项目的web根路径是WebRoot(WebContent)下
  3.maven项目在执行package后才会在target目录下生成项目的完整目录,包含项目的class文件和lib中引入的jar包.
   eclipse项目是根据buildpath路径实时编译class文件(你取消了autobuild另说),在WebRoot(WebContent)/WEB-INF/lib下存放引入的jar包
  观察以上3点能得到一些明显的区别:eclipse项目是标准的web程序目录结构,class文件和lib在web根路径下.maven项目的class和lib在target下,与web根目录分开存放.
  所以只需要将maven目录伪装成标准目录即可,在不破坏maven目录结构的情况下,有2种方式可行:
  1.标准目录都是web根路径下是class和lib,所以我们只需要将项目的buildpath设置到src/main/webapp/WEB-INF/classes下即可.然后复制一份lib文件到src/main/webapp/WEB-INF/lib下.把maven的web根目录处伪装出一个标准目录结构来.resin的配置默认即可正常运行.此时项目 依然是maven项目,但是可以按照eclispe的方式来运行调试.
  2.从resin的配置文件入手,不管怎么样最终运行的时候是要将项目部署到resin中才运行起来的,所以只要让resin能识别maven项目的目录结构也可达到目的.
  查找resin的配置文件能发现如下配置:



    <cluster id="app-tier">
<resin:import path="classpath:META-INF/caucho/app-default.xml" />
<server id="" address="127.0.0.1" port="6801">
<http address="*" port="9081" />
</server>

<host id="" root-directory=".">
<web-app id="/xxx" root-directory="D:\xxx\项目名\src\main\webapp" />
</host>
</cluster>
  可以看到有这么app-default.xml文件,打开它能看到如下部分:



<class-loader>
<compiling-loader path="WEB-INF/classes"/>
<library-loader path="WEB-INF/lib"/>
</class-loader>
  此处指定了resin加载class和lib文件的路径.maven中只有package后在target目录下会生成项目的完整文件,所以只要指定这个路径即可.
  我们注意到:



<host id="" root-directory=".">
<web-app id="/xxx" root-directory="D:\xxx\项目名\src\main\webapp" />
</host>
  resin的web根路径被指定为D:\xxx\项目名\src\main\webapp文件夹,所以以此目录为起点找到class和lib文件夹位置即可.我们package后在target目录下生成的目录为:



D:\xxx\项目名\target\buildname\WEB-INF\classes和lib
  我们使用相对路径,从webapp向上返1级目录到main,再向上到src,再向上到项目名目录,然后再进入target目录即可,所以只需要将app-default.xml文件修改成如下路径即可:



<class-loader>
<compiling-loader path="../../../target/classes"/>   
<library-loader path="../../../target/buildname/WEB-INF/lib"/>
</class-loader>
  可能要说buildname是什么,这个实际就是pom.xml中定义的:



<build>
<finalName>buildname</finalName>
</build>
  ps:虽然不认为有人会这么做,但是还是想强调一下第二种方法只是为了本地调试,别去乱改线上环境的resin配置.
页: [1]
查看完整版本: eclipse下maven项目保持原有目录结构配置resin运行环境