当前位置: 首页 > 知识库问答 >
问题:

如何使用 IDE 组织 Java 项目?

魏健柏
2023-03-14

我要开发java系统,它由三个应用程序组成。这些应用程序使用相同的包。如何在IntelliJ IDEA中组织这个项目?必须在项目中所有资源都组织在一个包层次结构中,还是在库中使用不同的项目。你能告诉我专业的解决方案吗?

共有3个答案

罗渝
2023-03-14

如果真的是专业,假设您还需要使用 Maven 构建项目,并按照 Maven 概念布局文件夹。即使您永远不会从命令行构建,大多数最新的优秀IDE也应该支持Maven项目。将来很可能需要使用 Maven,迁移的工作量会更少。

更新:这是在撰写本文时。现在我建议使用渐变,它比Maven更受欢迎。

时宾实
2023-03-14

我使用以下方法:root-project由一些子项目组成。其中一些依赖于其他(这是在项目属性中配置的)来使用项目依赖的代码库。

root-project
+---- project1
+---- project2
+---- project3
+---- shared-code-project
淳于亦
2023-03-14

专业的解决方案是不要依赖IDE来构建你的软件。您希望使用构建工具来构建软件。有许多构建工具可供选择,例如

  1. 蚂蚁
  2. 梅文
  3. 格拉德尔
  4. 构建器

等等。

您选择的工具取决于您如何看待构建软件。

例如,Make、ANT等工具采用“完全按照我说的去做”的方法来构建软件。如果你喜欢清楚地说出你想做什么和你想怎么做,这是很好的。

Maven等工具采用“约定胜于配置”的方法。他们说,如果你遵循这些约定,你就不必反复告诉构建工具如何做标准的事情,因此例如,对于Maven,如果你把你的Java源代码放在src/main/Java目录中,那么Maven会自动为你编译它,如果你将你的测试源代码放进src/test/JavaMaven就会为你编译并运行所有的测试。

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>

通用/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>

希望这有所帮助

 类似资料:
  • 我对Cucumber是新手,我正在使用Cucumber java。cucumber功能文件看起来很棒。然而,步骤定义的重用实际上阻碍了组织步骤定义代码。对我来说,组织步骤定义最直观的方法就是按照功能文件的组织方式,即一个类对应一个功能。但是,如果在两个要素文件中有两个相同的步骤,则这种方法是错误的,因为您将错过其中一个类中的一个步骤,这会破坏整个结构的一致性。然而,我现在无法说服自己使用其他方法。

  • 我正在GitHub上创建一个模块化的构建(使用module-info.java),但是在我想要模块化的模块中添加一个module-info.java时,无法执行任何测试... 我怎样才能做到这一点呢? 我正在使用以下版本: junit.jupiter版本5.3.0(第一次使用版本5.2.0也不成功) maven-compiler-plugin版本3.8.0(第一次使用版本3.7.0也不成功) ma

  • 问题内容: 我是从C#/ Visual Studio的背景来学习Java和Eclipse的。在后者中,我通常会组织这样的解决方案: \ MyProjects \ MyApp \ MyAppsUtilities \ LowerLevelStuff MyApp将包含一个用于构建.exe的项目,MyAppsUtilities将创建一个由.exe调用的程序集DLL,而LowerLevelStuff可能会构

  • Flask 把你的应用程序的组织交由你来决定。这是我喜欢把 Flask 推荐给初学者的原因之一,但是它确实意味着你必须花一些心思在组织你的代码上。你可以把你的整个应用程序放在一个文件中,或者让它们分布在多个包里。这里有一些你可以遵循的组织模式,它会让开发和部署更加容易。 定义 让我们定义一些术语,我们会在本章的后面碰到它们。 仓库/版本库 - 这是你的应用程序所在的基础文件夹。这个术语习惯上是指版

  • 问题内容: 我一直在努力建立我的cordova插件项目。主要由于以下事实: 插件需要位于远离主项目的单独文件夹中 例如,当我使用它来构建项目时,cordova从我的插件文件夹中复制java文件并将其放入文件夹中。 因此,我不应该在Android项目中手动修改插件的.java文件,而必须在插件文件夹中编写代码。 但是我无法将插件文件夹导入到IDE项目中,因此我没有代码完成功能。 没有IDE支持,基本

  • 我正在尝试设置自己的ca服务器和客户端。在用admin初始化ca服务器之后,我用ca client enroll cli命令注册了它。然后我想在系统中添加另一个组织。我更改了结构ca服务器配置。yml文件附属部分然后重新启动服务器,然后尝试使用ca客户端向该组织注册新用户。但它失败了,出现了“未找到关联”错误。所以我想知道这个问题。在使用admin user初始化服务器之后,其他用户和组织是否应该