开发和部署期间的 Java 依赖项

标签 java dependency-management

我有一个一般性问题,即管理编译和部署 jar 依赖项的正确方法是什么。对于一个简单的库/应用程序,我通常会像下面这样布置开发目录。

Calculator
   src
   test
   build
   lib
   …

有很多方法可以做到这一点,但这是我对通用项目的典型布局。我的问题围绕着 lib 目录。我通常将我的项目依赖的 jar 放在 lib 目录(log4j 等)中,因此在编译时我可以将我的各种路径设置为 lib\log4j.jar 或类似的东西。现在,当我们创建可分发包时,我倾向于反射(reflect)这种布局。

dist
   Calculator.jar
   lib
      log4j.jar
      addition.jar
      subtraction.jar

这允许我设置一个脚本来设置我的类路径相对于主 jar 的位置,或者我可以在 list 中为主 jar(在本例中为 Calculator.jar)设置类路径这可能是也可能不是最好的方法,但它对我有用,并且似乎是与我讨论过的其他开发人员接受的处理依赖关系的方法。

当我想创建一个新项目来使用我以这种方式布局的其他项目时,我的问题就来了。

假设我想创建一个新的计算器项目,该项目使用上面示例中的计算器项目。如果我遵循相同的布局,我会得到如下内容:

dist
   ScentificCalculator.jar
   lib
      Calculator.jar
      lib 
         Log4j.jar
         addition.jar
         subtraction.jar

当然,你的依赖树越深,这可能会失控:

SuperWhizBangCalculator.jar
lib
   ScientificCalculator.jar
   lib 
      Calculator.jar
      lib
         log4j.jar
         addition.jar
         subtraction.jar

另一种选择是将树展平:

SuperWhizBangCalculator
   lib
      ScientificCalculator.jar
      Calculator.jar
      log4J.jar
      addition.jar
      subtraction.jar

但这似乎有些不对劲。您失去了告诉您哪些库与您所依赖的组件一起使用的结构。所以我想知道是否有一个社区驱动的标准方法来做到这一点,理解从来没有一个适合所有人的大小。

谢谢你的时间...

最佳答案

不直接回答您的问题。但是您可以看看 Apache 的 Maven 2,它可以为您完成大部分“依赖管理”。

请注意,启动、运行和工作 Maven 2 有一些学习曲线:)

除此之外,第三个选项对我来说很有意义。

关于开发和部署期间的 Java 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361042/

相关文章:

java - 通过 REST 服务或 CLI 脚本连接到 Openshift 是最佳选择吗?

makefile - 发现 Makefile 或 cmake 的 MPI api 版本

java - gradle:如何测试不同版本的依赖项?

java - Selenium ;如何运行多个实例并维护不同的 session

java - 在 Android 中解析圣经的最佳方式

java - 如何在 ArrayList 中使用 set() 而不出现错误?

package - 使用 Bower 更新多个依赖项

rust - 在使用 --locked 构建时,如何让 Cargo 告诉我哪些内容已过时?

ios - 创建新的 Swift 包 - 找不到 header

java - HttpServletRequest 完成 URL