来自并行项目的Maven依赖项,而不是模块。

时间:2013-04-08 17:55:28

标签: maven dependencies

我有以下maven项目(注意:maven项目,而不是maven模块)。我知道我会得到问题,为什么不是模块,但无论如何它都有自己的故事。

myproj-common(JAR), myproj-core(JAR), myproj-product1-batch(EAR), myproj-product2-batch(EAR)

myproj-core依赖于myproj-common,而myproj-product1-batch依赖于myproj-core。 如果它是模块,我可以简单地创建依赖。它如果是标准存档,我也可以创建依赖关系并在存储库中提供JAR,如果它是库JAR,我可以... bla bla bla ...所有标准依赖我可以修复,我不知道如何制作一个坐在磁盘上某个地方的jar,一个依赖。

我无法得到 C:\ Documents and Settings \ users \ myproj-common \ target \ myproj-common-0.0.1-SNAPSHOT.jar
进入以下jar,作为依赖性 C:\ Documents and Settings \ users \ myproj-core \ target \ myproj-core-0.0.1-SNAPSHOT.jar

JAR进入EAR的问题相同。

有什么想法吗?怎么......希望一个小的,快速的,令人惊讶的修复,对我来说是不可见的。

1 个答案:

答案 0 :(得分:0)

我认为您没有任何理由不能使用mvn install将这些罐子和耳朵安装到本地存储库中。然后,您可以将它们作为依赖项包含在您喜欢的任何位置。

我怀疑你是否能够干净地让maven拉入一个位于你本地存储库以外的文件系统中任何位置的jar。

为了澄清,当你执行mvn install时,它会将您的JAR放在目标文件夹中,但它也会将其放入您的本地存储库(Windows中默认为C:\ Documents And Settings \ .m2)。在那里安装了JAR之后,你可以将这个JAR作为maven依赖项包含在其他项目中,使用你的pom中的“dependencies”块,如下所示:

<dependencies>
    <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId>
      <version>1.0</version>
    </dependency>
</dependencies>

依赖关系机制在Maven Docs

中进行了解释

此外,您需要告诉maven实际打包JAR中的所有依赖项。您可以通过将此添加到您的POM来实现。 (另请检查此问题How can I create an executable JAR with dependencies using Maven?以获取此代码块的来源)。

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
     <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id> <!-- this is used for inheritance merges -->
      <phase>package</phase> <!-- bind to the packaging phase -->
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>