我应该关心大量的依赖关系吗?

2024-03-19

我正要包括HtmlUnit http://htmlunit.sourceforge.net项目中的库。我解压了 zip 文件,发现它不少于12 个依赖项 http://htmlunit.sourceforge.net/dependencies.html.

在引入依赖项时我一直很担心。我想我必须将所有这些依赖项与应用程序一起发送(在本例中为 8.7 mb)。我是否应该费心检查这些库的安全更新?最后(也是最重要的,实际上是我最关心的):如果我想包含另一个依赖于与此库相同的库但版本不同的库怎么办?也就是说,如果 HtmlUnit 依赖于一个版本怎么办?xalan http://xml.apache.org/xalan-j/我需要的另一个库取决于 xalan 的不同版本?

HtmlUnit 为我解决的任务could可以“手动”解决,但这可能不会那么优雅。

我应该担心这个吗?在这种情况下,最佳做法是什么?

编辑:我对一般情况感兴趣,而不是特别涉及 HtmlUnit。我只是在这里用它作为例子,因为这是我当前关心的问题。


小心处理你的依赖关系。它们可以给你带来很大的速度,但维护起来可能会很痛苦。这是我的想法:

  • 使用一些软件来维护您的依赖关系。我将使用 Java 来执行此操作。没有它,您很快就会失去对依赖的跟踪。
  • 请记住,不同的库有不同的许可证。给定的许可证并不适用于您的设置。我在一家软件公司工作,我们不能在我们发布的任何软件中使用基于 GPL 的库,因为我们销售的软件是闭源的。同样,如果可以的话,我们也应该避免 LGPL(这是由于一些复杂的律师推理,不要问我为什么)
  • 对于单元测试,我会说全力以赴。如果您将来必须重写测试,那也不是世界末日。甚至可能软件的那部分要么非常稳定,要么甚至不再维护。失去这些并不是什么大不了的事情,因为当你获得它时,你已经获得了巨大的速度增益。
  • 有些库比其他库更难替换。有些就像婚姻一样,应该持续软件的生命周期,但另一些只是易于更换的工具。 (想想 Spring 与 xml 库)
  • 查看社区如何支持旧版本的库。他们支持旧版本吗?当生活继续而你却陷入某个版本时会发生什么?是否有活跃的社区或者您有能力自己维护它吗?
  • 您的软件应该持续多长时间?是一年、五年、十年还是更长?如果软件的时间跨度很短,那么您可以使用更多的时间来到达目的地,因为能够跟上库的升级并不那么重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该关心大量的依赖关系吗? 的相关文章

  • 如何以编程方式找出我的 PermGen 空间使用情况?

    我正在尝试诊断java lang OutOfMemoryError PermGen Space在 Sun 的 Hotspot JVM 上运行时出现错误 并且想知道我的程序在不同时刻使用了多少 PermGen 空间 有没有办法以编程方式找出这
  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为
  • 在哈希图中存储字符和二进制数

    我正在尝试存储字母到二进制数的映射 这是我的映射 h 001 i 010 k 011 l 100 r 101 s 110 t 111 为此 我创建了一个哈希映射并存储了键值对 我现在想显示给定句子的相应二进制值 这是我的代码 package
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 使用 JAXB 编组 LocalDate

    我正在构建一系列链接类 我希望能够将其实例编组到 XML 以便我可以将它们保存到文件中并稍后再次读取它们 目前我使用以下代码作为测试用例 import javax xml bind annotation import javax xml b
  • java中队列的实现

    在 Java 中实现队列是一个非常常见的面试问题 我在网上冲浪 看到了许多实现 他们做了一些奇特的事情 比如实现队列接口和编写自己的addLast and removeFirst 方法 我的问题是我不能使用LinkedList 类并使用其预
  • 如果按下 Esc 则中断循环

    我用 JAVA 语言编写了一个程序 它使用 Scanner 类接受来自控制台的输入 现在我想将此功能添加到我的代码中 以便在用户按下 Esc 按钮时存在循环 while 到目前为止 我认为键盘类可以帮助我 但它就像扫描仪一样 我尝试使用事件
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用
  • 代码编译期间遇到警告消息“使用或覆盖已弃用的 API”

    我编译了我的程序并收到以下错误 我该如何解决呢 Note ClientThreadClients java uses or overrides a deprecated API Note Recompile with Xlint depre
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • 用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)

    我正在寻找一个 Servlet 过滤器库 它可以帮助我保护我们的 Web 服务免受未经授权的使用和 DDoS 攻击 我们的网络服务有 授权客户 因此理想情况下 过滤器将帮助检测未经授权或行为不当的客户 或检测使用同一帐户的多个人 此外 我们
  • Scala(或 Java)中泛型函数的特化

    是否可以在 Scala 中专门化泛型函数 或类 例如 我想编写一个将数据写入 ByteBuffer 的通用函数 def writeData T buffer ByteBuffer data T buffer put data 但由于 put
  • 如何在命令提示符中检查 JAVA_OPTS 值?

    我们的应用程序部署 JBoss 服务器然后抛出错误 PermGen space 然后在 jboss bat 和配置文件中设置 permgen 变量中的 java OPTS JAVA OPTs 中是否有值 assige 如何检查 如何在命令提
  • 如何将txt文件添加到你的android项目中? [复制]

    这个问题在这里已经有答案了 我的Android studio版本是1 5 1 显然这个 never 版本没有 txt 文件的 asset 文件夹 您打算如何将这些文件包含到您的项目中 以及如何进一步使用您内部的应用程序 谢谢你的建议 Pro
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • Java 类:匿名类、嵌套类、私有类

    有人能解释一下Java中匿名类 嵌套类和私有类之间的区别吗 我想知道与每个相关的运行时成本以及每个编译器的方法 这样我就可以掌握哪个最适合用于例如性能 编译器优化的潜力 内存使用以及其他 Java 编码人员的普遍可接受性 我所说的匿名类是指
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri
  • 编译时在代码中替换Java静态最终值?

    在java中 假设我有以下内容 fileA java class A public static final int SIZE 100 然后在另一个文件中我使用这个值 fileB java import A class b Object t

随机推荐

  • 如何在离子中滚动到页面顶部

    目前我正在 javascript 和 angular js 上的 ionic 框架中工作 我只是放置搜索框并呈现客户列表 但假设在第一次尝试中我可以使用 a 进行搜索 它会显示具有 alpha a 的所有项目 但问题是当我向下滚动查看搜索结
  • 如何定义状态?

    有谁有一个好的定义state在网络应用程序的上下文中 更具体地说 什么是state在 React 的上下文中意味着 这与第一个定义有什么不同吗 我看到 状态 这个术语在 React 开发中被大量使用 但我一直无法找到一个可靠 简洁的定义 两
  • 我可以在 SQL Server Management Studio 中拥有多行选项卡吗

    我想知道是否可以将 SQL Server 设置为具有多行文件 查询选项卡 我有很多查询想要在它们之间切换 并且可以将它们移动到不同的水平组 但我认为两行比左侧下拉打开查询的大列表的引脚更容易导航 如果您固定足够的代码窗口来填满顶部栏 则 V
  • 使用自定义主干集合构建 Fuelux Datagrid 数据源

    我正在尝试构建启用排序 搜索和分页的数据网格 因此 我使用fuelux datagrid 我的主干视图如下所示 var app app function use strict The Players view app PlayersView
  • Linux / Bash 中随机打乱行

    我在linux下有一些文件 例如2 我需要将文件混入一个文件中 例如 cat file1 line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 and cat file2 linea
  • 使用线程循环更新 JFrame

    我对在循环中使用线程进行了一些广泛的搜索 虽然我了解单独线程如何工作的概念 但我似乎仍然无法掌握如何在我的简单应用程序中实现它 我的申请由一个带有文本框的表单组成 每次循环迭代时都需要更新此文本框 它以按下按钮开始 但循环也应以按下停止按钮
  • Javascript:无法获取新创建元素的高度

    使用新元素 例如 body append html 更新 DOM 后 我无法立即获取新更新元素的高度 例如 body height 部分修复是设置时间间隔并获取时间间隔结束时的高度 setTimeout alert body height
  • ncurses 终端大小

    如何找到 ncurses 应用程序的终端宽度和高度 void getmaxyx WINDOW win int y int x http linux die net man 3 getmaxyx我相信 另外 这可能会有所帮助 在C中获取终端宽
  • 使用多处理时合并 Pandas DataFrame

    我正在使用多重处理 并为每个进程生成一个 pandas DataFrame 我想将它们合并在一起并输出数据 以下策略似乎几乎有效 但是当尝试使用以下命令读取数据时df read csv 它只使用第一个name作为列标题 from multi
  • argparse 的非常基本的例子? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试编写最基本的代码来显示 arg 解析的工作原理 以便我能够理解它 我尝试阅读有关 argparse 的教程 但它非常令人困惑
  • 如何在 maven 的 java.library.path 变量中包含本机库

    我正在尝试为我的应用程序使用 JNotify 它有以下要求 只需使用以下命令运行 jar 文件即可测试 JNotify java Djava library path jar jnotify VER jar 目录 然后 JNotify 将监
  • Xpath local-name() 中的属性

    这是我的 xml 文件的一个小样本
  • Scala 中的 LazyList 和 Stream 有什么区别?

    我注意到Stream已弃用Scala 2 13他们建议使用LazyList 他们还说 使用 LazyList 完全惰性 而不是 Stream 仅具有惰性尾部 它到底是什么意思 他们为什么弃用Stream NthPortal 贡献者LazyL
  • 如何在 Firebase 中将电话与电子邮件和密码身份验证关联?

    我正在尝试创建一个应用程序 用户可以使用用户名和密码进行注册 然后输入电话号码 接收 OTP 代码并填写注册表 但有一个问题 如果您这样做 Firebase 会创建两个不同的用户 我如何组合 加入 它们 使其显示为一个帐户 输入电话号码的活
  • Android 动态创建按钮:setOnClickListener 不起作用

    The onClick永不起火 为什么不 请帮我 for int i 0 i lt 12 i String title Button i Button sliderButton new Button this sliderButton se
  • Android Studio 3.0 发现未知元素

    我更新Android Studio后 我的一个项目无法构建 错误信息是 Error 20 error unknown element
  • 如何在 BigQuery 查询中转义百分号?

    我们尝试从 BigQuery 中仅包含百分号 的字段中选择行 我们已经尝试过各种其他问题的答案 如下所示 SELECT COUNT 1 FROM Table WHERE field name LIKE 这会产生带有单引号或双引号的无效转义字
  • preg_replace 行首的双空格到制表符 (\t)

    只是一个简单的快速问题 我想用制表符替换行开头的双空格 目前我正在尝试preg replace 2 t text 但这仅替换了第一次出现的双倍空格 EDIT preg replace PATTERN REPLACEMENT HalloWor
  • 在两种不同模型用户和活动管理员的情况下,如何定义设备的自定义故障?

    我有两种模式 用户 和 活动管理员 我想在这两种模式上应用我的devise集成 我有我的custom failure rb如下 class CustomFailure lt Devise FailureApp def redirect ur
  • 我应该关心大量的依赖关系吗?

    我正要包括HtmlUnit http htmlunit sourceforge net项目中的库 我解压了 zip 文件 发现它不少于12 个依赖项 http htmlunit sourceforge net dependencies ht