一年前我一直在开发一个 Java 项目,并使用
Codehaus Mojo SQLJ Plugin
将 .sqlj 文件翻译为可访问的 Java 类。由于我保存了旧的版本库,我看到以下
<plugin>
被插入到我的
pom.xml
中:
<plugin>
?<build>; <插件>; <plugin>; <groupId>org.codehaus.mojo</groupId>; <artifactId>sqlj-maven-plugin</artifactId>; 版本>1.3</version>; 执行>; 执行>; 目标>; <目标>sqlj</目标>; </goals>; <配置>; <sqljDirs>; <sqljDir>src/main/sqlj/</sqljDir>; </sqljDirs>; <generatedSourcesDirectory>../sales-persistance/src/main/java</generatedSourcesDirectory>; <生成的资源目录>./sales-persistance/src/main/resources/ro/ibm/sqlj</生成的资源目录>; 配置>; </execution>; </executions>; <dependencies>; 依赖关系>; <groupId>com.ibm.db2</groupId>; <artifactId>sqlj4</artifactId>; <version>4.29.29</version>; </dependency>; </dependencies>; </plugin>; </plugins>; </build>;
它使用
com.ibm.db2:sqlj4
依赖关系进行 sqlj 翻译。根据我的研究,SQLJ 可使用两种翻译器之一进行翻译:IBM 或 Oracle 的翻译器。根据他们的文档,此类翻译器仅随数据库一起提供(例如,Oracle 随数据库 23c 一起提供,等等),而不是作为独立的软件包提供。一年前,该
com.ibm.db2:sqlj4
翻译器在 MavenCentral 上可用现在,它已不再可用在 GitHub 上找到的旧项目中,Oracle 也有一个不带数据库客户端的 SQLJ 翻译器 (com.oracle:sqlj
),但我似乎无法在任何 Maven 资源库中找到它。为什么我再也找不到独立版本的翻译器?此外,是否有可能下载 jar 文件并通过
pom.xml
将其添加到本地?Oracle 和 IBM 没有为这些翻译器提供任何下载链接。
你观察到的情况是正确的。过去,像
com.ibm.db2:sqlj4
这样的 SQLJ 翻译器可以独立获得并被包含在 Maven Central 等存储库中。但是,现在情况已不再如此。
这些翻译器不再作为独立组件提供的主要原因有以下几点:
- 与数据库版本的紧密耦合: SQLJ 翻译器与特定的数据库版本紧密相连。将它们作为独立组件发布会带来兼容性挑战,并可能导致在将代码部署到不同数据库版本时出现问题。
- 许可和分发: Oracle 和 IBM 可能希望将这些翻译器作为其数据库产品的一部分进行许可和分发,而不是作为单独的组件提供。这使他们能够更好地控制使用情况并将其与他们的数据库产品捆绑销售。
- 转向替代技术: 近年来,开发人员已经转向 JPA(Java Persistence API)和 Hibernate 等替代技术来进行持久性管理。这些技术提供了更标准化和更便携的数据库访问方法。
如何解决此问题
不幸的是,你无法再轻松下载独立的 SQLJ 翻译器 jar 文件并将其包含在你的
pom.xml
中。你必须采取以下方法之一:
-
将翻译器包含在你的数据库安装中: 正如你所提到的,Oracle 和 IBM 在他们的数据库产品中包含了 SQLJ 翻译器。如果可以访问数据库安装,则可以从那里引用翻译器 jar 文件。但这会将你的项目绑定到特定的数据库版本和供应商。
-
探索替代技术: 如果可能的话,请考虑迁移到 JPA 或 Hibernate 等替代持久性技术。这些技术得到了广泛的支持,并提供了更标准化和更便携的数据库访问方法。
-
调查社区驱动的解决方案: 可能存在由社区领导的努力来提供独立的 SQLJ 翻译器。但是,这些解决方案可能无法获得正式的支持或维护。
结论
不幸的是,那些独立的 SQLJ 翻译器时代已经一去不复返了。你最好的选择是评估你的选择,并确定最适合你的项目需求和限制的方法。
标签:java,db2,oracle-sqldeveloper,ojdbc,sqlj From: 78477884