2016-07-01 47 views
1

我有一个项目,其中有多个.jar文件。在过去,我有一个build.xml文件,当时我正在运行Ant,它正在用这些多个罐子创建一个新罐子,而这个全新的罐子被称为依赖关系。Maven启动ant任务,然后使用它作为依赖项

现在,我切换到maven,我想知道我如何能够实现这一点。换句话说,如何告诉maven将多个jar构建到一个jar中,然后将其引用为依赖项?为了把东西放到更坚实的基础,我将共享的文件夹结构,我有:

+- mainProject 
+- pom.xml  
+- someGroup 
| +- pom.xml <- refer here 
| +- sampleModule1 
| | +- pom.xml <- build here 
| | +- build.xml 
| | +- first.jar 
| | +- second.jar 

一个在我脑海里的想法是告诉Maven来调用build.xml,这将创造新的罐子掉那些两罐,然后使用它作为依赖项,如下所示:

<dependency> 
     <groupId>someGroup</groupId> 
     <artifactId>org.boofcv</artifactId> 
     <version>1.0.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/../shared/org.boofcv/brand-new.jar</systemPath> 
    </dependency> 

但是,我怀疑它会起作用,因为鸡蛋问题可能会发生。当我打电话给maven安装时,创建新的.jar的任务可能发生在maven将其视为依赖项之后,从而导致错误。

有没有人知道这个解决方法?

+0

停止使用systemPath ...错误的方向。你可以通过'refer here'来解释你的意思吗?你可以做一个你当前状态的示例项目,并把它放在github上... – khmarbaise

+0

我正在使用本地存储库,并且我想从其他两个jar中构建一个jar。后来我想用这个新的jar作为依赖。简单。 –

+0

“本地资源库”是什么意思? '$ HOME/.m2/repository'?从几个jar构建一个jar可以通过maven-shade-plugin来完成...... – khmarbaise

回答

0

在搜索了更多内容之后,我才知道无法调用一个Ant脚本将这些罐子制作成一个罐子,同时告诉Maven使用最终的罐子。请参见下面的quote

“当使用Maven的Antrun插件时,Maven试图解决依赖性构建类路径的AntRun调用,因此你面对一个鸡和蛋的问题:你不能宣布的依赖即会在AntRun执行过程中需要依赖运行,这是行不通的。“

改为,我的found out插件叫做maven-shade-plugin。它使用小罐子创建了一个大瓶子,我可以在后面的顶层pom.xml中使用它作为依赖关系,这正是我所要求的。