Java 为什么选择flyway';在maven';s pom.xml?

Java 为什么选择flyway';在maven';s pom.xml?,java,maven,flyway,Java,Maven,Flyway,大多数依赖于其他包的插件倾向于在插件配置中声明依赖关系。比如说,这是吗 com.github.spotbug spotbugs maven插件 4.2.0 com.github.spotbug 斑点虫 4.2.3 spotbugs“core”的版本在插件>依赖项>依赖项中指定 然而,flyway似乎不是这样工作的。例如,以下数据库驱动程序所在的配置运行良好 mysql mysql连接器java 运行时 ... org.flywaydb FlywayMaven插件 ${flyway.vers

大多数依赖于其他包的插件倾向于在插件配置中声明依赖关系。比如说,这是吗


com.github.spotbug
spotbugs maven插件
4.2.0
com.github.spotbug
斑点虫
4.2.3
spotbugs“core”的版本在
插件>依赖项>依赖项中指定

然而,flyway似乎不是这样工作的。例如,以下数据库驱动程序所在的配置运行良好


mysql
mysql连接器java
运行时
...
org.flywaydb
FlywayMaven插件
${flyway.version}
jdbc:mysql://localhost:3306/mydb
根
根
问题:

  • 这是否意味着依赖项(至少编译和运行时范围的依赖项)也在构建时目标的类路径中
  • 这可能是主观的,但如果真的有一个最佳实践,它显然会帮助像我这样的初学者。那么,在“global”
    标记中编写flyway的依赖项是一种好的/通用的编码方式吗
  • 驱动程序是捆绑的,可以在没有Java项目的情况下使用 为了在命令行和脚本中使用,Flyway附带了用于多个数据库的JDBC驱动程序

    完成此绑定后,非Java开发人员和系统管理员可以按原样使用该工具,而无需建立Java环境

    有关支持的数据库,请参阅文档。每个数据库产品的每个页面都会提到是否包含驱动程序

    Flyway可能没有捆绑最新的JDBC驱动程序。但这很少有关系,因为Flyway使用的JDBCAPI非常少。AllFlyway只执行SQL脚本,并记录这些执行。这项工作涉及很少调用JDBC更基本的功能,不太可能受到驱动程序更新的影响

    带上您自己的驱动程序,以便在Java项目中使用 如果在Java项目中使用Flyway,那么您应该已经为特定数据库安装了您选择的JDBC驱动程序

    对于各种数据库,有多个供应商提供的多种驱动程序的多个版本。Flyway不知道什么适合您的情况。因此,Flyway不负责在Java项目中安装JDBC驱动程序。这是你的责任


    请注意,依赖项管理和构建配置工具(如Maven)具有安装依赖项的功能,该依赖项仅用于IDE,而不用于部署。在某些情况下,例如使用ApacheTomcat之类的应用服务器,您可能需要单独安装JDBC驱动程序,而不是将其捆绑在JAR/WAR/EAR文件中。

    mvn flyway:migrate
    为例

    在注释中配置的has
    requiresDependencyResolution=ResolutionScope.TEST
    ,根据,将允许访问
    中定义的几乎所有依赖项


    然后在
    AbstractFlywayMojo.java
    (这是
    MigrateMojo.java
    的一个超类)中,编译和运行时类路径元素将被添加到
    classloader
    。它随后由org.flywaydb.core.internal.scanner.scanner处理,以加载必要的类。

    似乎捆绑了很多驱动程序,导致了更大的tarball。但实际上它们都很小。
    flyway parent
    的pom.xml在
    中列出了一些依赖项版本,但这就足够了吗?@wlnirvana我添加了一条关于在Java项目中安装您自己选择的驱动程序的说明。感谢更新。“已经安装了驱动程序”是否意味着依赖关系也可用于maven构建目标?我不是从IDE运行迁移,而是直接从命令行运行迁移