草庐IT

为新手解释 Java 项目结构?

coder 2023-05-14 原文

我来自 .NET 背景,对 Java 完全陌生,我正在努力了解 Java 项目结构。

我的典型 .NET 解决方案结构包含表示逻辑上不同组件的项目,通常使用以下格式命名:

MyCompany.SomeApplication.ProjectName

项目名称通常等于项目的根命名空间。如果它是一个大型项目,我可能会进一步分解命名空间,但通常我认为不需要进一步命名空间。

现在在 Java 中,您有由项目组成的应用程序,然后您有一个新的逻辑级别 - 包。什么是包?它应该包含什么?你如何在这个 App.Project.Package 结构中命名空间? JAR 在哪里适合这一切?基本上,有人可以向新手介绍 Java 应用程序结构吗?

谢谢!

编辑:谢谢大家。然后是几个后续问题:

  • .JAR 文件是否包含已编译的代码?还是只是压缩的源代码文件?
  • 包名全部小写有充分的理由吗?
  • 包可以有“循环依赖”吗?换句话说,Package.A 可以使用 Package.B,反之亦然吗?
  • 任何人都可以展示将类声明为包中并声明您希望引用类中的另一个包的典型语法(可能是 using 语句?)

最佳答案

“简单”J2SE 项目

正如 cletus 所解释的,源目录结构直接等同于包结构,它本质上是内置于 Java 中的。其他一切都不太明确。

很多简单的项目都是手工组织的,所以人们可以选择他们觉得合适的结构。通常所做的(这也反射(reflect)在 Eclipse 中的项目结构上,这是一个非常重要的 Java 工具)是让您的源代码树从一个名为 src 的目录开始。 .您的无包源文件将直接位于 src 和您的包层次结构中,通常以 com 开头目录,同样包含在 src 中.如果您 CDsrc启动 javac 之前的目录编译器,你编译的 .class文件将在相同的目录结构中结束,每个 .class 文件都位于相同的目录中,并且在其 .java 旁边。文件。

如果您有很多源文件和类文件,您需要将它们彼此分开以减少困惑。手册和 Eclipse 组织经常放置 binclassessrc 平行的目录所以 .class 文件最终形成一个与 src 相同的层次结构。 .

如果您的项目有一组 .jar从第三方库提供功能的文件,然后是第三方目录,通常是 lib , 与 src 平行放置和 bin . lib 中的所有内容需要放在classpath下编译执行。

最后,还有一大堆这个和那个或多或少是可选的:

  • 文档在 doc
  • resources 中的资源
  • data 中的数据
  • conf 中的配置...

你明白了。编译器并不关心这些目录,它们只是您组织(或混淆)自己的方式。

J2EE 项目

J2EE 大致相当于 ASP.NET,它是一个用于组织 Web 应用程序的大型(标准)框架。尽管您可以以任何您喜欢的方式为 J2EE 项目开发代码,但是对于 Web 容器期望您的应用程序交付的结构有一个严格的标准。而且这种结构往往也会反射(reflect)到源代码布局中。 这是一个页面,详细介绍了 Java 项目的一般项目结构(它们与我上面写的不太一致),特别是 J2EE 项目:

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

Maven 项目

Maven是一个非常通用的项目构建工具。就我个人而言,ant 很好地满足了我的构建需求。 , 与 nmake 大致比较.另一方面,Maven 是完整的生命周期构建管理,带有依赖管理。 Java 世界中大多数代码的库和源代码都可以在 'net 中免费获得,如果问得好,maven 会为您抓取它,并将您的项目所需的一切带回家,而您甚至不需要告诉它。它也为您管理一个小存储库。

这种高度勤奋的小动物的缺点是它对项目结构的高度法西斯主义。你用 Maven 的方式来做,或者根本不做。 Maven 将其标准强加于人,设法使全局项目在结构上更加相似,更易于管理,并且更易于以最少的输入自动构建。

如果您选择了 Maven,则不必担心项目结构,因为只有一个。就是这样:http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

关于为新手解释 Java 项目结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1953048/

有关为新手解释 Java 项目结构?的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  4. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  5. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  6. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  7. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  8. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  9. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  10. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

随机推荐