2013-10-16 29 views
0

我有兩個不同的項目和兩個項目使用相同的核心jar文件。第一個項目從Web服務獲取數據,另一個項目不需要Web服務。在覈心jar文件中,我從web serivce jar文件加載一些類,但另一個項目不使用此web serivce jar文件。因此,當我將第二個項目部署到Jboss服務器或在Maven上構建時,它報告了第二個項目中不存在Web服務的核心jar文件中缺少的一些類。如何在java中需要時加載類文件

所以我想問如何在部署到Jboss或構建Maven時動態加載java類文件?類只在存在時加載,Java反射是否是一個選項?

+1

將項目拆分爲相關模塊。使用maven來設置依賴關係。 –

+0

我同意@BoristheSpider,但我想補充一點,這是一個常用模式,其中一個實用程序項目包含並非每個相關項目都需要的實現。只要它們沒有被實例化,那不一定是問題。我已經看到應用程序上下文文件(Spring beans文件)遵循約定的項目,以便依賴項目知道類路徑上期望的文件,並讓他們選擇實例化這些文件。 –

+0

另外,讓我預測你的未來:有一天你會恨自己稱這個項目爲「核心」。這意味着什麼,它將是一個開放的門,添加各種無關的東西,它會像雜草一樣長大。給它一個明確的,描述性的域名或功能名稱是它的責任。 –

回答

0

感謝鮑里斯和桑德,

我有兩個不同的工作區:NextiraOne與持久性項目,核心項目和店工程建設。 Franke工作空間建立在持久性項目,核心,商店項目和額外的ws-client-franke項目之上。

我已經在覈心項目的pom.xml中定義如下:

<profile> 
     <id>default-mandant</id> 
     <activation> 
      <property> 
       <!-- If no mandant was specified then activate this profile --> 
       <name>!bl.config.mandant</name> 
      </property> 
     </activation> 
     <properties> 
      <!-- Choose your default mandant (nextiraone/franke) --> 
      <bl.config.mandant>nextiraone</bl.config.mandant> 
     </properties> 
    </profile> 


<dependency> 
     <groupId>com.sharis.p7.customizer</groupId> 
     <artifactId>ws-client-${bl.config.mandant}</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 

WS-客戶弗蘭卡已經在那裏了法蘭克的工作空間,但我不想定義另一個項目WS-客戶nextiraone因爲nextiraone工作區不需要Web服務。

因爲兩個工作區使用相同的核心項目,所以當我輸入這樣的核心

import com.sharis.p7.webservice.client.franke.order.delivery.DeliveryData; 

,並部署到JBoss服務器或建立在Maven的,到NextiraOne工作區報道DeliveryData類不能被發現。