某些时候,项目里依赖的 jar lib 可能并没有在 public repository 里面,比如外包厂商生成的 jar。有一种做法是直接添加 sytem scope 的依赖:
<dependency>
<groupId>com.demo.www</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/demo-0.0.1.jar</systemPath>
</dependency>
这么做不是不可以,但会看着很奇怪,依赖管理起来也很麻烦,某些时候还会遇到 bug (maven-dependency-plugin 里配置的 runtime includeScope 并不会把这个 system scope 的依赖放进去)
另一种做法就是把这个 jar 上传到你的 私有 Nexus 里面就行管理,用的时候保持平常的 dependency 规则就好了:
<dependency>
<groupId>com.demo.www</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
</dependency>
下面就给出笔者所使用的 bash 上传脚本,读者请按照你的实际情况修改即可,从此 pom 里无需system scope的依赖了。
mvn deploy:deploy-file \
-DgroupId=com.demo.www \
-DartifactId=demo \
-Dversion=0.0.1 \
-DgeneratePom=true \
-Dpackaging=jar \
-DrepositoryId=myrepository \
-Durl=http://myrepository.com/content/repositories/releases \
-Dfile=demo-sdk-java-0.0.1.jar