我想通过反射使用 MySQL,但不得不对 MySQL jar 文件进行硬编码——我可以从 Maven 下载最新版本吗?

Posted

技术标签:

【中文标题】我想通过反射使用 MySQL,但不得不对 MySQL jar 文件进行硬编码——我可以从 Maven 下载最新版本吗?【英文标题】:I want to use MySQL using reflection, but have had to hard code the MySQL jar file - can I download latest version from Maven? 【发布时间】:2021-02-02 15:12:06 【问题描述】:

我有一个访问 mysql 的通用工具 jar 文件。当我查看 jar 文件时,我看到它有大约 11 Mb,包括 MySQL 和 ProtoBuf,而我自己的代码大约是 0.5 Mb。 MySQL 只被我的几个工具使用,所以我想下载 MySQL 的东西,并为 MySQL 函数使用反射。

反射代码现在可以工作了,但是 MySQL jar 文件的位置和版本号必须是硬编码的。它也依赖于 Eclipse (.m2)。我想做的总是下载最新版本的 MySQL,并使用它。我想我可以使用 Maven 函数下载最新版本 number,但我不知道从那里去哪里!有人建议 Aether - 它仍然有效吗?

TIA

【问题讨论】:

Maven 可以支持依赖范围,参见maven.apache.org/enforcer/enforcer-rules/versionRanges.html。请注意,此 jar 在构建时解析。我不确定它是否能解决您的问题,因为它只会影响您构建 jar 的方式。关于您的方法值得注意的一个警告是,该 jar 中的更改可能会引入破坏向后兼容性的更改。通过尝试使用反射与 mysql 进行交互,您正在将编译时错误变成运行时错误。 @Taylor 你最后一句话说得好——但是,我的系统是面向组件的,我想避免我支持的每个新软件都使我的 jar 文件膨胀……你(或其他任何人)有任何我没有想到或不知道的包装方法吗? TIA 你不需要构建一个“胖 jar”,你可以只编译和发布你的代码,针对已知的依赖关系,并管理一个在类路径上包含所有必需库的应用程序环境。这将允许您在所述应用程序环境中独立升级依赖项。但是,从本质上讲,您是以管理应用程序环境所需的时间为代价来节省带宽和磁盘空间的。 Fat jars 很受欢迎,因为它们很容易,通常磁盘和 badnwidth 是一个很小的代价。此外,拥有代表您的应用的原子工件也很不错。 谢谢,@Taylor,但是当我将 MySQL jar 文件包含在我的类路径中时,它会包含在我自己的 jar 文件中,这意味着所有未来的用户都会在 jar 文件中看到 mysql,无论他们是否需要它与否......或者是其他东西拉入mysql jar文件......?抱歉有点慢! 这完全取决于你如何构建你的 jar。您可以在运行时指定类路径,而不是在 jar 中。如何将其从 jar 中排除取决于您构建 jar 的方式。 Maven,默认情况下不会创建胖 jar,但可以这样做:tutorials.jenkov.com/maven/maven-build-fat-jar.html 或使用各​​种插件。如果您将依赖项指定为 provided 范围 maven.apache.org/guides/introduction/… ,它将被排除,任何通过此 dep 的传递也将被排除。 【参考方案1】:

我认为您可以只使用最新版本的快照。据我所知,如果您使用 -SNAPSHOT,Maven 每天都会搜索新版本。

【讨论】:

谢谢,但我确实知道如何找到最新版本 - 我的问题是如何从 Maven 下载它并访问它的类和方法......除非@Taylor 或其他人有更好的包装技术 - 见上文。谢谢!【参考方案2】:

我有一个使用 Curl 从 Maven 访问信息的工作解决方案 - 两次:一次是找出最新版本的 mysql-connector-java(jar 文件),一次是下载它。它有效,但我同意@Taylor 的观点,并会看看我是否能想出一个非反射解决方案。不过我会结束这个问题。

【讨论】:

以上是关于我想通过反射使用 MySQL,但不得不对 MySQL jar 文件进行硬编码——我可以从 Maven 下载最新版本吗?的主要内容,如果未能解决你的问题,请参考以下文章

mysql设置时间

mysq通过ProxySQL实现读写分离

mysq解决sleep进程过多的办法

我无法通过终端访问 mac os x 上的 mysql

java中反射(Reflect)的常见应用场景

mysql创建数据库