大多数依赖其他包的插件倾向于在插件配置中声明依赖项。例如,spottbugs的文档执行
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.2.0</version>
<dependencies>
<!-- overwrite dependency on spotbugs if you want to specify the version of spotbugs -->
<dependency>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs</artifactId>
<version>4.2.3</version>
</dependency>
</dependencies>
</plugin>
斑点虫的版本";核心";在CCD_ 1中指定。
然而,天桥似乎不是这样运作的。例如,以下数据库驱动程序位于<dependencies>
中的配置运行得很好。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>${flyway.version}</version>
<configuration>
<url>jdbc:mysql://localhost:3306/mydb</url>
<user>root</user>
<password>root</password>
</configuration>
</plugin>
</plugins>
</build>
问题:
- 这是否意味着依赖项(至少是编译和运行时范围的依赖项(也在构建时目标的类路径中
- 这可能是主观的,但如果确实有一个最佳实践,它显然会帮助像我这样的初学者;全局";
<dependencies>
标签
驱动程序是捆绑的,用于不带Java项目的情况
为了在命令行和脚本中使用,Flyway与几个数据库的JDBC驱动程序捆绑在一起。
这样做是为了让非Java开发人员和系统管理员可以按原样使用该工具,而无需建立Java环境。
请参阅支持的数据库的文档。每个数据库产品的每个页面都会提到是否包含驱动程序。
Flyway可能没有捆绑最新的JDBC驱动程序。但这并不重要,因为Flyway很少使用JDBC API。所有的Flyway只不过是执行SQL脚本,并记录这些执行。这项工作只涉及很少的JDBC基本功能调用,不太可能受到驱动程序更新的影响。
自带驱动程序,用于Java项目
如果在Java项目中使用Flyway,那么您应该已经为您的特定数据库安装了您选择的JDBC驱动程序。
对于各种数据库,有来自多个供应商的多种驱动程序的多个版本。Flyway不知道什么适合您的情况。因此,在Java项目中安装JDBC驱动程序不是Flyway的责任。这是你的责任。
注意依赖性管理&Maven等构建配置工具具有安装依赖项的功能,该依赖项仅在IDE中使用,而不在部署中使用。在某些情况下,例如使用Apache Tomcat等应用程序服务器,您可能需要单独安装JDBC驱动程序,而不是捆绑在您的JAR/WAR/EAR文件中。
以mvn flyway:migrate
为例。
源mojo在其注释中配置了requiresDependencyResolution = ResolutionScope.TEST
,根据maven的文档,这将允许访问<dependencies>
中定义的几乎所有依赖项。
然后在AbstractFlywayMojo.java
(它是MigrateMojo.java
的一个超类(中,将编译和运行时类路径元素添加到classloader
中。它稍后由plugin > dependencies > dependency
0处理以加载必要的类。