传统的开源Java应用程序

时间:2011-08-14 09:35:04

标签: java open-source maven dependencies log4j

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

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

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

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

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

  

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

如果你是maven,那就照顾好了。 (src / main / java,src / test / java等)

  

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

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

答案 2 :(得分:1)

Buddy如果有人想在公共或oss项目上工作,他们可能已经足够用Java来自己设置环境了。话虽这么说,你的选择是:

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

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

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

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

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

答案 3 :(得分:1)

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

一旦你完成了使用Maven构建项目并采用m2eclipse插件让Maven与Eclipse一起工作,你可能想看看Maven assembly plugin,你可以用它来生成一个zip文件它将您的项目与其所有依赖项组合在一起,并且可能是一个启动脚本,负责设置您的CLASSPATH而无需调用项目的启动类。

答案 4 :(得分:1)

根据我的个人经验,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类的单元测试 也应该在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)将提供某些依赖项,您还可以设置依赖项将提供然后,它将可用于运行应用程序,用于单元测试,但它不会成为最终包中的地方。

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