我想將我的項目分成兩個不同的罐子。第一個將是具有所有業務邏輯的'核心'罐子。第二個是使用核心的命令提示符版本。以下是包含內容和代碼片段的項目結構。模塊化Java應用程序
CoreApp項目結構
CoreApp
- src
- com.myapp.service
- CoreService.java
- lib
- thirdPartyX.jar
- coreFile.txt
的CmdLine項目結構
CmdLineApp
- src
- com.myapp.main
- MainClass.java
- lib
- thirdPartyY.jar
- coreApp.jar
- input.txt
MainClass.java
public class MainClass {
pulic static void main(String[] args) {
File inputFile = new File("input.txt"); //OK
...
coreService.doSomething(); //ERROR
}
}
CoreService.java
public class CoreService {
public void doSomething() {
File coreFile = new File("coreFile.txt"); //NOT OK
...
}
}
而且我現在面臨幾個問題:
cmdLineApp沒有thirdPartyX.jar連我都coreApp.jar在裏面。 (現在作爲替代lib目錄中的coreApp.jar的解決方法,我在STS中的CmdLineApp的構建路徑中添加CoreApp項目)
當運行main()方法應用程序可以訪問/查找input.txt但不是coreFile。文本。 (我不想放置coreFile.txt)在CmdLineApp項目中,因爲它僅在覈心中使用)。
所以我的問題是我如何使文件被拾取而不必寫/硬編碼的絕對路徑。在這種類型的項目結構中,我怎樣才能將jar與第三方jar一起組織起來。
分離核心的原因是我也會開發基於web的版本,其中我將利用控制器的核心服務方法。因此,cmd行和基於Web的將使用相同的核心代碼。
使用URLClassLoader加載* .jar和文件的代碼應該位於CoreApp或CmdLine項目中? –
這取決於。如果你的CmdLine加載你的CoreApp和CoreApp會加載重置,那麼這兩個代碼都會有這樣的代碼。 –
- 我不確定'reset'是什麼意思,但是CmdLine只會使用MainClass.java中顯示的服務 –