传统的开源Java应用程序

我已经将Java用于我的“家庭项目”一段时间了,现在需要通过github或Google Code这样的存储库来提供我的一些项目。

只要我是该项目的唯一开发人员,并且只要我一直在Eclipse中工作,那么完全没有关于构建和运行它的问题。 一切都很好。 问题基本上是,如果有人要我分享,我该怎么办? 🙂

首先要做的是,使用Maven等工具构建项目。 在这种情况下,无论是否安装了Eclipse,或者更喜欢IDEA,他都可以下载我的项目并使用Maven构建。 或者,导入Eclipse / IDEA并构建。

所以,澄清这个问题,这里有两点:

  1. 我的目录结构应该是什么样的? 文件夹,如src,bin,还有其他什么?
  2. 我的应用程序应该运行的方式是什么? 例如,我的应用程序需要log4j才能运行。 在构建软件包时,Maven解决了这种依赖关系。 但是当构建包时,你应该手动提供log4j的路径(使用java -cp ... ) – 如果我只想提供.sh和.cmd脚本以方便用户,那么消除这个要求的方法是什么? ?

根据我的个人经验,maven是构建和管理依赖项的最佳工具,所以我对你的问题的答案都是关于maven的。 此外,使用maven,您只需要提供包含依赖项定义和项目构建配置的pom.xml文件。 您共享的项目不需要包含任何内部JAR,因为它曾经与基于ant的项目一起使用。

我的目录结构应该是什么样的? 文件夹,如src,bin,还有其他什么?

在标准的maven项目中:)( http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

  • src / main / java应用程序源(Java类)
  • src / test / java应用程序测试(类com.company.Foo的unit testing也应该在com.company包中,它引入了一些顺序,有时使测试更容易)
  • src / main / resources应用程序资源,例如,提供国际化的message.properties文件
  • 用于测试的src / test / resources资源,例如,如果您希望与返回某些内容的http服务器进行集成测试,则可以转储网站。

还有其他目录,例如src / main / webapp – 所有这些目录都在maven文档中描述。

我的应用程序应该运行的方式是什么? 例如,我的应用程序需要log4j才能运行。 在构建软件包时,Maven解决了这种依赖关系。 但是当构建包时,你应该手动提供log4j的路径(使用java -cp …) – 如果我只想提供.sh和.cmd脚本以方便用户,那么消除这个要求的方法是什么? ?

根据pom.xml文件中定义的配置,Maven会处理所有这些事情。 如果你的程序需要一些额外的库,maven会为你下载它,并放在包含你的应用程序的包中。 例如,如果您的应用程序服务器(log4j JAR)将提供某些依赖项,您还可以设置将提供依赖项,然后,它将可用于运行应用程序,用于unit testing,但它不会位于最后的包裹。

maven提供的其他强大function是构建配置文件。 例如,您可以在日常开发模式中使用某些设置,但是如果要构建用于生产的包,则将使用其他设置。

如果您和您的同行只想继续使用Eclipse,那么共享项目,包括.project和其他隐藏文件,并避免引用外部jar文件和其他资源。 如果需要log4j.jar,则将其放入项目中并将其添加到构建路径中。

即使对于多个程序员来说,这也非常有效,并且是最快的启动和运行方式。

我的目录结构应该是什么样的? 文件夹,如src,bin,还有其他什么?

如果你在maven,它会被照顾。 (src / main / java,src / test / java等)

我的应用程序应该运行的方式是什么?

我认为maven exec插件应该在这里帮助你。 看看http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html ,看看它是否符合要求。

伙计,如果有人想要在公共或oss项目上工作,他们可能已经足够用Java来自己设置环境。 话虽如此,您的选择是:

a)Maven(超级简单,我有一个使用它的GitHub项目设置,只需使用Git下载并使用IDE Maven Option导入)。 我试图在每个主要的ide中使用这个选项,从来没有任何问题。 如果您有很多依赖项,这将特别有用。

b)检查你的eclipse项目文件,我知道这听起来很愚蠢,但大多数IDE让你导入Eclipe项目。

c)写一个README文件! (显然我知道)。

d)如果有一些设置项目的过程,写一个ant文件来完成所有繁重的工作(初始化所有东西)。

我不担心项目结构。 同样,如果有人想与你合作,他们可能足够聪明,可以在不打扰你的情况下完成任务。 我也不担心编译和运行项目,但如果你真的想要,你可以设置Ant或Maven来完成它。

正如Maven的狂热爱好者所说,Maven是自以为是的软件。 通过这种方式,他们意味着如果你坚持它所强加的惯例,Maven会为你做更多的事情。 目录结构可能是最重要的。 我不建议你先采用Maven而不先阅读它,你可以从这里开始。

一旦你完成了使用Maven构建项目并采用m2eclipse插件让Maven与Eclipse一起工作,你可能需要查看Maven程序集插件 ,使用它可以生成一个zip文件,将你的项目打包在一起具有所有依赖项,可能还有一个启动脚本,可以在不调用项目的启动类的情况下设置CLASSPATH。