【问题标题】:Maven to initate ant task and then using it as dependencyMaven 启动 ant 任务,然后将其用作依赖项
【发布时间】:2016-11-03 11:49:32
【问题描述】:

我有一个项目,其中包含多个 .jar 文件。过去,我有一个 build.xml 文件,我正在通过 Ant 运行它,它正在从这些多个 jar 中创建一个新 jar,而这个全新的 jar 被称为依赖项。

现在我切换到 maven,我想知道如何将它 mavenize。换句话说,如何告诉 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,它将从这两个 jar 中创建新的 jar,然后将其用作依赖项,如下所示:

<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 install 时,创建新的.jar 的任务可能会在 maven 将其作为依赖项查找后进行,从而导致错误。

有人知道解决方法吗?

【问题讨论】:

  • 停止使用 systemPath...方向错误。你能解释一下“参考这里”是什么意思吗?你能做一个你当前状态的示例项目并将它放在 github 上吗...
  • 我正在使用本地存储库,我想用其他两个 jar 构建一个 jar。稍后我想使用这个新的 jar 作为依赖。很简单。
  • local repository 是什么意思? $HOME/.m2/repository ?可以通过 maven-shade-plugin 从多个 jar 构建一个 jar...
  • 是的,确切地说,我的意思是.m2/repository。感谢您的指导,如果您将此作为答案,我会接受。
  • 如果您使用本地缓存,请不要使用systemPath,因为这是错误的..

标签: maven ant jar


【解决方案1】:

查了很多,才知道不能调用一个Ant脚本把这些jar构建成一个jar,同时告诉Maven使用最终的jar。见下文quote

“当使用 Maven Antrun 插件时,Maven 会尝试解析依赖项来为 AntRun 调用构建 ClassPaths,因此您将面临一个先有鸡还是先有蛋的问题:您无法声明将在 AntRun 期间创建的依赖项需要此依赖项才能运行的执行。这是行不通的。”

相反,我 found out 一个名为 maven-shade-plugin 的插件。它从小罐子中创建了一个大罐子,稍后我可以在我的顶级pom.xml 中将其用作依赖项,这正是我所要求的。

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2019-09-02
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多