我要开发一个Java系统,它由三个应用程序组成。这个应用程序使用相同的包。例如,如何在 IntelliJ IDEA 中组织这个项目?它必须在项目中以包的一个层次结构或在库中使用的不同项目中组织的所有源。你能告诉我专业的解决方案吗?
3 回答
专业的解决方案是不要依赖 IDE 来构建您的软件。您想使用构建工具来构建软件。有许多构建工具可供选择,例如
- 制作
- 蚂蚁
- 马文
- 耙
- 摇篮
- 建造者
等等
您选择的工具取决于您如何看待构建软件。
例如 Make、ANT 等工具采用“照我说的做”的方法来构建软件。如果您喜欢准确说明您想要完成的工作以及您希望如何完成,这可能会很好。
诸如 Maven 之类的工具采用“约定优于配置”的方法。他们说如果你遵循约定,你不应该重复告诉构建工具如何做标准的事情,例如,如果你把你的 Java 源代码放在src/main/java
目录中,那么 Maven 会自动为你编译它,如果您将测试源代码放入,src/test/java
那么 Maven 将为您编译并运行所有测试。
Maven 并不适合所有人……有些人似乎想花更多的时间告诉构建工具确切地做什么,而更少的时间编写他们的软件……这很好……不是我(我在 Maven PMC...猜我最喜欢的构建工具是什么并不奇怪)...但是这些人确实喜欢 Maven 提供的一些“约定优于配置”的东西...他们只是想要一种更灵活的方式在需要时进行覆盖摆脱常规......具有这种思维方式的人会使用 Gradle 和 Buildr 等工具。
好的 IDE 将获取构建文件并从该构建工具推断项目结构。IntelliJ、Eclipse 和 NetBeans 都理解 Maven 的pom.xml
构建文件。它使您的 IDE 设置为无操作。由于我个人使用 Maven 和 IntelliJ,因此我没有调查其他构建工具在 IDE 中的公平性。
选择一个构建工具,看看它是如何为您工作的。我假设您使用的是版本控制系统……如果您要更改构建工具,那应该没什么大不了的。
如果您选择使用 Maven,您将从 4 或 5 模块项目开始(一个父模块和三个子模块,可能还有一个共享的公共模块)
代码的结构如下
+- pom.xml (the root parent pom)
+- common (the common module directory)
| +- pom.xml (the common module pom)
| \- src
| +- main
| | +- java
| | | \- com... (your package dirs for common classes)
| | \- resources
| | \- com... (your package dirs for common classpath resources)
| \- test
| +- java
| | \- com... (your package dirs for tests of common classes)
| \- resources
| \- com... (your package dirs for common test classpath resources)
+- app1 (the app1 module directory)
| +- pom.xml (the app1 module pom)
| \- src
| +- main
| | +- java
| | | \- com...
| | \- resources
| | \- com...
| \- test
| +- java
| | \- com...
| \- resources
| \- com...
+- app2 (the app2 module directory)
| +- pom.xml (the app2 module pom)
| \- src
| +- main
| | +- java
| | | \- com...
| | \- resources
| | \- com...
| \- test
| +- java
| | \- com...
| \- resources
| \- com...
\- app3 (the app3 module directory)
+- pom.xml (the app3 module pom)
\- src
+- main
| +- java
| | \- com...
| \- resources
| \- com...
\- test
+- java
| \- com...
\- resources
\- com...
你的根pom.xml
看起来像
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mydomain.something</groupId>
<artifactId>something-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>common</module>
<module>app1</module>
<module>app2</module>
<module>app3</module>
</modules>
</project>
会common/pom.xml
看起来像
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mydomain.something</groupId>
<artifactId>something-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>something-common</artifactId>
<dependencies>
<!-- insert the 3rd party dependencies you want -->
</dependencies>
</project>
然后每个应用程序 pom 看起来像这样
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mydomain.something</groupId>
<artifactId>something-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>something-app1</artifactId>
<dependencies>
<dependency>
<groupId>com.mydomain.something</groupId>
<artifactId>something-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- insert any 3rd party dependencies you want for app1 only -->
</dependencies>
</project>
希望这可以帮助
我使用以下方法:root-project
由一些子项目组成。其中一些依赖于其他(在项目属性中配置)来使用项目依赖的代码库。
root-project
+---- project1
+---- project2
+---- project3
+---- shared-code-project