gpt4 book ai didi

java - 模块化Java应用程序

转载 作者:行者123 更新时间:2023-12-02 05:06:09 24 4
gpt4 key购买 nike

我试图将我的项目分成两个不同的 jar 。第一个是“核心”jar,它将包含所有业务逻辑。第二个是用于命令提示符版本,它将使用核心。以下是包含内容和代码片段的项目结构。

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
...
}
}

我面临几个问题:

  1. cmdLineApp 没有thirdPartyX.jar,即使我有coreApp.jar。 (目前作为解决方法,我在 STS 中 CmdLineApp 的构建路径中添加 CoreApp 项目,而不是 lib 目录中的 coreApp.jar)

  2. 运行 main() 方法时,应用程序可以访问/查找 input.txt,但不能访问/查找 coreFile.txt。 (我不想将 coreFile.txt 放在 CmdLineApp 项目中,因为它仅严格在核心中使用)。

所以我的问题是如何让文件被拾取而不必编写/硬编码绝对路径。以及如何在这种项目结构中组织 jar 和第三方 jar。

拥有单独核心的原因是我也将开发基于网络的版本,其中我将利用 Controller 的核心服务方法。因此,命令行和基于 Web 的都将使用相同的核心代码。

最佳答案

  1. cmdLineApp doesn't have thirdPartyX.jar even I have coreApp.jar in it. ( For now as workaround instead of coreApp.jar in lib directory I am adding CoreApp project in the build path of CmdLineApp in STS)

大多数“专业”应用程序通过实例化自己的 ClassLoader 来处理此问题与相应的 CLASSPATH 设置。通常这是使用 URLClassLoader 完成的。他们将存储额外的 .jar文件在 lib/目录。您可以编写创建 URLClassLoader 的代码以某种方式它会拾取任何东西.jar就在那lib/目录,因此如果您添加、删除或重命名 .jar 则无需触及该代码文件。

如果.jar文件是插件,您甚至可以拥有第二个 ClassLoaderjava.nio.file.WatchService有关为了检测.jar的变化运行时归档。

  1. When running main() method application can access/find input.txt but not coreFile.txt. (I don't wan to put coreFile.txt) in CmdLineApp project as it is strictly used in core only).

如果您只需要读取该文件,请将该文件作为资源放入 .jar 文件中并使用 getClass().getResourceAsStream()getClass().getResource()访问该文件。请注意,它不再是 File但是InputStreamURL ,但如果您只读,这应该不重要。

如果您需要写入此文件,您可以采用之前的方法,将数据存储在可以使用 File.createTempFile() 创建的临时文件中。并使用 java.util.prefs.Preferences 记住路径.

关于java - 模块化Java应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com