我要开发java系统,它包含三个应用程序。此应用使用相同的包。如何组织这个项目,例如,IntelliJ IDEA?必须在项目的所有源中组织一个包的层次结构或在库上使用的不同项目。你能告诉我专业解决方案吗?
答案 0 :(得分:10)
专业解决方案不是依靠IDE来构建您的软件。您想使用构建工具来构建软件。有许多构建工具可供选择,例如
等
您选择的工具取决于您如何看待构建软件。
例如Make,ANT等工具采用“完全按照我说的方式”构建软件的方法。如果您想要明确说明您想要完成的工作以及您希望如何完成,那么这可能会很好。
Maven等工具采用“约定优于配置”的方法。他们说如果遵循这些约定,你就不必反复告诉构建工具如何做标准事情,所以例如使用Maven,如果你将Java源代码放在src/main/java
目录中,那么Maven会自动如果你把测试源代码放在src/test/java
中,Maven会为你编译并运行所有的测试。
Maven并不适合每个人......有些人似乎想花更多的时间告诉构建工具究竟该做什么,而且花更少的时间编写他们的软件......那很好......不是我(我是在Maven PMC上......猜测我最喜欢的构建工具是没有惊喜的......)但是这些人确实喜欢Maven给出的一些“约定优于配置”的东西......他们只是想要一种更灵活的覆盖方式当他们需要离开大会时......像Gradle和Buildr这样的工具被那些具有这种心态的人使用。
好的IDE将获取构建文件并从该构建工具推断项目结构。 IntelliJ,Eclipse和NetBeans都了解Maven的pom.xml
构建文件。它使您的IDE设置为无操作。我没有调查其他构建工具如何在IDE中公平,因为我个人使用Maven和IntelliJ。
选择一个构建工具,看看它是如何工作的。我假设您正在使用版本控制系统...如果您正在更改构建工具应该不是什么大问题。
如果您选择使用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>
然后每个app poms看起来都像这样
<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>
希望这有帮助
答案 1 :(得分:3)
我使用以下方法:root-project
由一些子项目组成。其中一些依赖于其他(这是在项目属性中配置)来使用项目的代码库依赖。
root-project
+---- project1
+---- project2
+---- project3
+---- shared-code-project
答案 2 :(得分:2)
如果真的很专业,假设您还需要在Maven concepts沿着Maven和布局文件夹构建项目。即使你永远不会从命令行构建,大多数最好的IDE都应该支持Maven项目。很可能您将来可能需要使用Maven,迁移的工作量会减少。
更新:这是在撰写本文时。现在我建议使用gradle,它比Maven更受欢迎。