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

来源:互联网 发布:炫动相机软件 编辑:程序博客网 时间:2024/04/29 04:09

在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/

 

0 0
原创粉丝点击