Maven和Eclipse代码组织
我是Maven的新手,在阅读了Maven网站上的文档和Sonatype的在线Maven书籍之后,我仍然不清楚如何最好地组织事情 我有两个应用程序,A和B共享mylib的代码。不同的开发者在应用程序A和应用程序B上工作,它们是独立发布的。在我们开始使用maven之前,在Eclipse中,我有一个包含应用程序a、B和mylib的工作区。应用程序A的类路径包含mylib。如果我在mylib中做了更改,按runwitheclipse,就会包含我的最新更改 在Maven中,我可以创建一个父pom.xml,它引用了应用程序a和mylib。但这使mylib成为应用程序a的子目录。我如何保留mylib的一个实例而不链接应用程序a和B的构建 我们在SCM中使用SVNMaven和Eclipse代码组织,eclipse,maven,Eclipse,Maven,我是Maven的新手,在阅读了Maven网站上的文档和Sonatype的在线Maven书籍之后,我仍然不清楚如何最好地组织事情 我有两个应用程序,A和B共享mylib的代码。不同的开发者在应用程序A和应用程序B上工作,它们是独立发布的。在我们开始使用maven之前,在Eclipse中,我有一个包含应用程序a、B和mylib的工作区。应用程序A的类路径包含mylib。如果我在mylib中做了更改,按runwitheclipse,就会包含我的最新更改 在Maven中,我可以创建一个父pom.xml,
多亏了您有多种选择,然而,最简单的方法可能是将mylib分离到具有自己生命周期的Maven项目中。这种方法的好处是,您可以支持多个版本的mylib,并且您的应用程序A和B可以根据需要引用不同版本的mylib。如果mylib和appA在Eclipse中是开放的(并且mylib引用了您已经打开的mylib版本),那么您可以使用与使用Maven之前相同的方式构建应用程序 这种方法不要求应用程序的目录结构之间存在任何依赖关系,因此您可以使用类似于以下内容的方法:
<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>
/myapps/mylib/myapps/appA
/myapps/appB 这种方法的缺点是maven不会自动构建appA和mylib(或appB和mylib),因为它们被视为单独的应用程序。但是,如果您的应用程序使用的是mylib的预定义和内置版本(已使用“mvn安装”上传到本地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>
4.0.0
com.test
迈里布
0.0.1
罐子
迈里布
...
阿帕:
4.0.0
com.test
阿帕
罐子
阿帕
...
com.text
谢谢,这很有帮助。我手动编辑了Eclipse.classpath文件以包含mylib(在maven之前),并且Eclipse中的工作与预期的一样。
<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>
<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>