我知道这是一个经常出现的问题,但我尝试了之前的所有解决方案并在途中迷路了。
我们走了:
我有以下结构: 一个名为OB的旧系统,具有四个模块:核心,IO,匹配和GUI。 IO和匹配参考Core,GUI引用所有其余的。开发在Eclipse中完成,带有项目引用,ANT脚本将整个事件编译为4个jar和一个lib文件夹。
一个名为ORE的新系统引用了这4个罐子。并且有一个更大的lib文件夹,其中OB lib文件夹是子集。
我已经尝试了一个星期将这个东西变成了一个maven结构。 我会饶恕你所做的巨大混乱,我只想说我愿意接受具体的建议。
提前致谢,
托默
答案 0 :(得分:1)
鉴于您也使用eclipse,并且需要一种很好的集成方法,我建议您将其设置为多模块构建,从根目录中的(最少)6个目录中进行布局:
- build
- core
- io
- matching
- ob
- ore
Build是构建它的主项目。从这里添加对所有模块的引用
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>com.example</groupId>
<artifactId>build</artifactId>
<!-- Change Project version here. Do not use a property for this, Maven will complain -->
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../core</module>
</modules>
</pom>
Core和其他人可以将这个构建pom作为 parent 引用回来,但除非你在构建pom中有全局设置(例如编译器版本等),否则没有必要。
相反,每个项目可能都是个人的(但保持版本号相同)。鉴于核心是独立的,我可以告诉你io:
<project>
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>com.example</groupId>
<artifactId>io</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!--Parent is optional but useful if you need global settings in the build pom -->
<parent>
<groupId>com.example</groupId>
<artifactId>build</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../build/pom.xml</relativePath>
</parent>
<!-- Refer back to other projects easily -->
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
使用此设置,可以轻松导入eclipse(Import as Maven项目)。 我通常发现maven的轻微严格性质导致项目更好地对齐,所以最终我最终移动源和资源以更好地适应maven模型(惯例确实使pom文件更小)。
有时您可能会在此过程中定义更多模块,但这不会有问题。
您可以控制构建目录中的所有模块,例如
mvn clean install
mvn versions:set -DnewVersion=2.1.16.GA -DgenerateBackupPoms=false
mvn sonar:sonar
或者你喜欢的任何东西。
答案 1 :(得分:0)
答案 2 :(得分:0)
您需要做的就是将所有引用放在相应的pom.xml中。 -IO和匹配的pom将具有Core的依赖性。 喜欢
<dependency>
<groupId>com.core</groupId>
<artifactId>core</artifactId>
<version>1.0</version>
</dependency>
其他模块也是如此。您可以在pom.xml中定义modules
。如果我正确理解你的问题,它应该适合你。