Maven和Eclipse代码组织

Maven和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,

我是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中使用SVN


多亏了您有多种选择,然而,最简单的方法可能是将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>