16.7.3. 部署第三方构件

你的Maven项目可以依赖于一个构件,这个构件不能从中央Maven仓库或任何其它公开Maven仓库找到。有很多原因可能导致这种情形发生:这个构件可能是私有数据库的JDBC驱动如Oracle,或者你依赖于另一个JAR,它既不开源也无法免费获得。在这样的情况下,你就需要手动拿来这些构件然后发布到你自己的仓库中。Nexus提供宿主的"third-party"仓库,就是为了这个目的。

为了阐明发布一个构件至第三方仓库的过程,我们使用一个真实的构件:Oracle JDBC驱动。Oracle发布一个广泛使用的商业数据库产品,该产品带有一个中央Maven仓库没有的JDBC驱动。虽然中央Maven仓库在http://repo1.maven.org/maven2/com/oracle/ojdbc14/10.2.0.3.0/维护了一些Oracle JDBC驱动的POM信息,但这些只是指向Oracle站点的POM。如果你将下列的依赖添加到你的项目。

Example 16.6. Oracle JDBC JAR 依赖

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

用这个依赖运行一个Maven构建,将会产生如下的输出:

$ mvn install
...
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) com.oracle:ojdbc14:jar:10.2.0.3.0

  Try downloading the file manually from: 
      http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html

  Then, install it using the command: 
      mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 \
               -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there: \
      mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc14 \
                 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=/path/to/file \
                 -Durl=[url] -DrepositoryId=[id]

  Path to dependency: 
  	1) sample:sample:jar:1.0-SNAPSHOT
  	2) com.oracle:ojdbc14:jar:10.2.0.3.0

----------
1 required artifact is missing.

Maven构建失败了因为它不能在Maven仓库中找到Oracle JDBC驱动。要补救这种情况,你将需要发布Oracle JDBC构件至你的Nexus third-party仓库。为此,从http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html下载Oracle JDBC驱动,然后保存至文件ojdbc.jar。使用以下命令发布该文件至Nexus:

$ mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc14 \
> -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc.jar \
> -Durl=http://localhost:8081/nexus/content/repositories/thirdparty \
> -DrepositoryId=thirdparty
...
[INFO] [deploy:deploy-file]
Uploading: http://localhost:8081/nexus/content/repositories/thirdparty/\
                  com/oracle/ojdbc14/10.2.0.3.0/ojdbc14-10.2.0.3.0.jar
330K uploaded
[INFO] Retrieving previous metadata from thirdparty
[INFO] Uploading repository metadata for: 'artifact com.oracle:ojdbc14'
[INFO] Retrieving previous metadata from thirdparty
[INFO] Uploading project information for ojdbc14 10.2.0.3.0

在你运行mvn deploy:deploy-file之后,该构件会被发布至Nexus的third-party仓库。