程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> eclipse下maven項目保持原有目錄結構配置resin運行環境,mavenresin

eclipse下maven項目保持原有目錄結構配置resin運行環境,mavenresin

編輯:JAVA綜合教程

eclipse下maven項目保持原有目錄結構配置resin運行環境,mavenresin


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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved