你有多种选择,但可能是最简单的方法是mylib中分离出来,与自己的生命周期自身的Maven项目。这种方法的好处是您可以支持多个版本的mylib,并且您的应用程序A和B可以根据需要引用不同版本的mylib。如果mylib和appA在Eclipse中打开(并且mylib引用已打开的mylib版本),则可以使用与使用Maven之前相同的方式构建应用程序。
这种方法不会强制要求应用程序的目录结构之间的依赖关系,所以你可以用类似下面的东西去:
/安装MyApps/MYLIB
/安装MyApps /的appA
/安装MyApps /程序appB
这种方法的缺点是,maven不会自动构建appA和mylib(或appB和mylib),因为它们被视为单独的应用程序。但是,如果您的应用程序使用mylib的预定义和构建版本(已使用“mvn install”上传到本地maven存储库),这可能不是什么大问题。
下面是这些项目的POM的一个例子:
MYLIB:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>myLib</artifactId>
<versioning>0.0.1</versioning>
<packaging>jar</packaging>
<name>mylib</name>
...
</project>
的appA:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>appA</artifactId>
<packaging>jar</packaging>
<name>appA</name>
...
<dependencies>
<groupId>com.text</groupId>
<artifactId>mylib</artifactId</artifactId>
<version>0.0.1</version>
</dependencies>
...
</project>
appB的:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>appB</artifactId>
<packaging>jar</packaging>
<name>appB</name>
...
<dependencies>
<groupId>com.text</groupId>
<artifactId>mylib</artifactId</artifactId>
<version>0.0.1</version>
</dependencies>
...
</project>
如果仍要父母的方便POM(一个MVN包注释),那么你可以在类似于以下的/安装MyApps文件夹中创建一个主POM:
<project>
<groupId>com.test</groupId>
<version>0.0.1</version>
<artifactId>myapps</artifactId>
<packaging>pom</packaging>
<name>myapps</name>
<modules>
<module>shared</modules>
<module>appA</modules>
<module>appB</modules>
</modules>
</project>
这个POM会自动建立MYAPP,和的appA程序appB。如果需要,你也可以创建一个appA和appB特定的POM(pom-appA.xml)。从Maven的角度来看,这不是最干净的方法,但它会起作用。唯一的问题是,如果mylib的版本不是appA或appB所依赖的版本。在这种情况下,您的appA或appB代码将针对您的Maven存储库中的版本进行编译(如果该版本存在)。
还有很多其他的选项可以使用,并且我已经在博客和Wiki上看到了很多关于各种场景最适合的讨论。但是,它通常归结为适合您和您的组织的最佳方法。只要它有效,并且您不打算构建一个定制的,不可移植的Maven解决方案,那么您可能确实无疑。
希望这给你一些你可以使用的想法。
谢谢,这有助于。我手动编辑了Eclipse .classpath文件以包含mylib(如之前的maven),并且事情在Eclipse中按预期工作。 – 2011-02-09 16:24:56