你的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仓库。