我想将我的项目分成两个不同的罐子。第一个将是具有所有业务逻辑的'核心'罐子。第二个是使用核心的命令提示符版本。以下是包含内容和代码片段的项目结构。模块化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中显示的服务 –