在Maven仓库中查找Oracle JDBC驱动程序

我想将oracle jdbc驱动程序添加到我的项目中,作为依赖项(运行时范围) – ojdbc14。 在MVNrepository站点中放入POM的依赖是:

<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency> 

当然这不起作用,因为它不在maven使用的中央存储库中。 2个问题:

  1. 如何find包含此工件的存储库(如果有)?

  2. 我如何添加它,以便Maven将使用它?

如何find包含此工件的存储库(如果有)?

不幸的是,由于二进制许可证,Oracle驱动程序JAR没有公共存储库。 这种情况发生在很多依赖上,但不是Maven的错。 如果您碰巧find包含JAR的公共存储库,则可以确定这是非法的。

我如何添加它,以便Maven将使用它?

一些JAR由于许可证原因而无法添加,因此在Maven中央仓库中有一个POM条目。 只需检查它,它包含供应商的首选Maven信息:

 <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> 

…和在这种情况下下载文件的URL http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html

一旦你下载了JAR,只需将它添加到你的计算机存储库(注意我从POM中取出了groupId,artifactId和版本):

 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 \ -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc.jar -DgeneratePom=true 

生成POM的最后一个参数将使您免受pom.xml警告的攻击

如果你的团队有一个本地的Maven仓库, 这个指南可能会有助于在那里上传JAR。

无论出于何种原因,我无法得到任何上述解决scheme的工作。 (还是不行)

我所做的是将jar包含在我的项目中(blech),然后为它创build一个“系统”依赖项,指示jar的path。 这可能不是正确的方法,但它确实有效。 而且它不需要团队中的其他开发人员(或者设置构build服务器的人员)将jar放在本地存储库中。

更新 :当我运行Hibernate工具时,这个解决scheme适用于我。 但是,它看起来不适用于构buildWAR文件。 它不包含目标WAR文件中的ojdbc6.jar文件。

1)在项目的根目录下创build一个名为“lib”的目录。

2)在那里复制ojdbc6.jar文件(无论调用哪个jar)。

3)创build一个看起来像这样的依赖:

 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc</artifactId> <version>14</version> <scope>system</scope> <systemPath>${basedir}/lib/ojdbc6.jar</systemPath> <!-- must match file name --> </dependency> 

丑,但为我工作。

要将这些文件包含在war文件中,请将以下内容添加到您的pom文件中

 <build> <finalName>MyAppName</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>${basedir}/src/main/java</directory> <targetPath>WEB-INF/classes</targetPath> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.css</include> <include>**/*.html</include> </includes> </resource> <resource> <directory>${basedir}/lib</directory> <targetPath>WEB-INF/lib</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </webResources> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> 

下载jar并把它放在你的项目src/lib 。 现在你可以使用Maven安装程序插件。

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <id>install-oracle-jdbc</id> <goals> <goal>install-file</goal> </goals> <phase>clean</phase> <configuration> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> <createChecksum>true</createChecksum> <file>${project.basedir}/src/lib/ojdbc6.jar</file> </configuration> </execution> </executions> </plugin> 

现在你只需要执行mvn clean一次,oracle lib安装在本地的maven仓库中。

Oracle现在在maven.oracle.com公开maven仓库但是你需要被authentication。

请参阅https://blogs.oracle.com/WebLogicServer/entry/weblogic_server_and_the_oracle

根据博客文章中的意见,ojdbc驱动程序应该在以下坐标处可用:

 <groupId>com.oracle.weblogic</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.3-0-0</version> <packaging>jar</packaging> 

试试:

 <repositories> <!-- Repository for ORACLE ojdbc6. --> <repository> <id>codelds</id> <url>https://code.lds.org/nexus/content/groups/main-repo</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> </dependency> </dependencies> 

您可以使用Nexuspipe理第三方依赖项以及标准maven存储库中的依赖项。

Oracle JDBC驱动程序现在可以在Oracle Maven信息库中find(不在中央)。

 <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.0.2</version> </dependency> 

Oracle Maven存储库需要用户注册。 说明可以在:

https://blogs.oracle.com/dev2dev/entry/oracle_maven_repository_instructions_for

1.如何find包含此工件的存储库(如果有)?

所有Oracle数据库JDBC驱动程序均根据OTN许可协议进行分发。

如果您阅读OTN许可协议,您会发现以下许可条款:

你不可以:

– 分发节目,除非伴随您的申请;

所以这就是为什么你不能在任何公共Maven Repository中find驱动程序的jar,因为它将被单独分发,如果发生这将是一个许可证违规。

添加依赖项:

 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency> 

(或任何更新的版本)使Maven只下载ojdbc14-10.2.0.3.0.pom ,并在那个你可以阅读:

 ... <licenses> <license> <name>Oracle Technology Network Development and Distribution License Terms</name> <url>http://www.oracle.com/technology/software/htdocs/distlic.html</url> </license> </licenses> ... 

通知您有关OTN许可证。

2.我如何添加它,以便Maven将使用它?

为了使上面的依赖工作,我同意victor hugo谁build议你在这里手动安装到您的本地Maven存储库( .m2目录)的jar通过运行:

 mvn install:install-file -Dfile={Path_to_your_ojdbc.jar} -DgroupId=com.oracle -DartifactId=ojdbc -Dversion=10.2.0.3.0 -Dpackaging=jar 

但是我想补充说的是,上面的许可证条款并不仅限于你无法findJDBC jar的地方,而且也限制了你在哪里安装它。

事实上, 你的本地Maven仓库必须是私有的,而不是共享的,因为如果它是共享的,它将是一种独立分发jar的分发方式,即使只有一小部分人进入你的局域网, 违反OTN许可协议

此外,我认为你应该避免将JDBC jar安装在你的公司仓库pipe理器 (如Artifactory或Nexus )中,因为如果它安装的话,它仍然是单独分发的,即使只给你组织中的人员,这也代表违反OTN许可协议

到目前为止,它不可能使用maven仓库。 我使用ivy作为依赖pipe理工具,但也使用maven2的ibiblio存储库。 这是为常春藤工作:

 <dependency org="oracle" name="ojdbc14" rev="10.2.0.2" conf="*->default"/> 

Maven2的依赖可能是这样的:

 <dependency> <groupId>oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.2</version> </dependency> 

请注意,我定义了http://download.java.net/maven/2/和http://mirrors.ibiblio.org/pub/mirrors/maven/mule/dependencies/maven2/ [organization] / [module] / [修订] / [神器] – [修订]。[外部]作为外部maven2回购我的常春藤设置。

大家好消息! 最后我们可以使用Oracle的官方仓库: https : //blogs.oracle.com/dev2dev/get-oracle-jdbc-drivers-and-ucp-from-oracle-maven-repository-without-ides

某些Oracle产品支持将Maven工件发布到本地存储库。 该产品有一个插件/ maven目录,其中包含说明哪里可以find这些工件以及在哪里存储它们。 有一个Oracle的插件,实际上会做上传。

请参阅: http : //docs.oracle.com/middleware/1212/core/MAVEN/config_maven.htm

其中一种可能以这种方式运送OJDBC的产品是WLS,但它使用的却是相当奇怪的坐标:

 <groupId>com.oracle.weblogic</groupId> <artifactId>ojdbc6</artifactId> <version>12.1.2-0-0</version> 

我在LGPLv2下发布opensource,甚至在与Oracle进行了几次电子邮件交谈之后,他们还不清楚我是否被允许通过发行版运输他们的二进制JDBC驱动程序。 这个问题与我的许可证是否符合他们的OTN条款有关,所以他们build议我不允许运送这个驱动程序。 大概与这部分有关

(b)将程序分发给您的客户开发的应用程序,前提是每个被许可人同意许可符合本协议条款的条款

因此,即使您设法在您的专有/本地Maven存储库中合法地发布驱动程序,仍然存在对您允许使用该工件的限制。 似乎荒谬的是,即使我以二进制forms将驱动程序与完整的OTN许可证文件一起运送,我仍然无法使用它,并且必须强制我的用户手动下载Oracle驱动程序,然后才能使用我的软件。

有一个回购提供了jar子。 在SBT中添加一个类似如下的parsing器:“ http://dist.codehaus.org/mule/dependencies/maven2 ”中的“oracle driver repo”

和一个依赖项:“oracle”%“ojdbc14”%“10.2.0.2”

你可以用maven做同样的事情。 pom.xml和jar可用( http://dist.codehaus.org/mule/dependencies/maven2/oracle/ojdbc14/10.2.0.2/ )。

如果您使用Netbeans,则转到依赖关系并手动安装工件。 find您下载的.jar文件及其完成。 干净的构build将解决任何问题。

解决了

  • 请执行以下设置来解决错误

这个存储库需要被启用以查找Oracle 10.0.3.0依赖关系(这个设置需要在Buildconfig.groovy中完成grails.project.dependency.resolver =“ivy”//或ivy

编译时Oracle驱动程序下载也使用以下设置

运行时“com.oracle:ojdbc:10.2.0.3.0”

这应该解决您的问题找不到Grails应用程序的Oracle驱动程序