关于Maven dependency中外部jar包依赖的问题

在maven项目中,我们的项目依赖一般取自local的repository或者远程的repository,比如下面这个配置:

<dependency>
	<groupId>commons-cli</groupId>
	<artifactId>commons-cli</artifactId>
	<version>1.2</version>
</dependency>


一般而言,maven会先去本地的repository寻找,如果找不到,就会依据<repository>的定义,去远程的repository去找依赖。

不过有时候,我们依赖的jar并不在任何repository中,可能就是从同事那里拷贝来的一个孤独的jar文件。怎么办?

Maven有办法处理这种情况,它支持systemscope的定义方式,可以加载本地任意路径下的jar包,定义如下:

<dependency>
	<groupId> commons-cli </groupId>
	<artifactId> commons-cli </artifactId>
	<version>1.0.0</version> 
	<scope>system</scope>
	<systemPath>${basedir}/libs/commons-cli.jar</systemPath>	
</dependency>

这样,把想要加载的jar包:commons-cli.jar放到工程的libs/目录下,在java code中就可以引用这个jar包中的class了。

往往在项目开发中,我们需要把整个项目加上依赖,打成一个jar包,这样放到任何地方都可以独立运行,不依赖于任何其他jar包,非常方便。

这个时候,我们会发现,对于<scope>system</scope>,maven不会把这个jar包的内容打包到最后的jar-with-dependencies.jar中,怎么办?

后来在网上找到一个有趣的办法:既然maven可以把repository中的依赖打到最后的jar包中,那么把这个外部的jar包放到repository中,也就可以让maven把这个外部的jar包打到最后的jar包中。

Maven支持安装jar包到本地的repository,所以这个方法是可行的,具体pom配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external</id>
            <phase>clean</phase>
            <configuration>
                <file>${basedir}/libs/commons-cli.jar</file>
                <repositoryLayout>default</repositoryLayout>
                <groupId>commons-cli</groupId>
                <artifactId>commons-cli</artifactId>
                <version>1.0.0</version>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>



这样:Mvn clean就会安装这个jar包,然后在mvn package就可以打出带有这个jar包的big jar包。

安装jar包的过程之所以在clean phase阶段,是因为maven需要项目的所有依赖都得到解决,之后才开始执行。


我试了试,果然work,非常好使。

 

参考:

http://eureka.ykyuen.info/2014/06/10/maven-include-system-scope-dependency-in-maven-assembly-plugin/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值