【问题标题】:Traditional Open Source Java Application [closed]传统的开源 Java 应用程序 [关闭]
【发布时间】:2011-08-14 09:35:03
【问题描述】:

我已经将 Java 用于我的“家庭项目”有一段时间了,现在需要通过 github 或 Google Code 等存储库使我的一些项目可用。

只要我是该项目的唯一开发人员,并且只要我一直在 Eclipse 中工作,那么构建和运行它绝对不会有任何问题。一切正常。问题基本上是,如果有人要求我分享,我该怎么办? :-)

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

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

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

【问题讨论】:

  • 说真的,如果有人想为 OSS 或公共项目做出贡献,我认为只要您提供一个体面的 README,他们应该不会有任何问题来启动和运行他们的环境。跨度>
  • 那些想以“不具建设性”而关闭的人认为这个问题是问“如果我想为 Maven 改编一个 Eclipse 项目,我应该怎么做”。
  • 这对我来说似乎很有建设性。也许可以使用一些焦点。

标签: java open-source maven dependencies log4j


【解决方案1】:

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

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

【讨论】:

  • 毫无疑问,最终会有人出现并为您添加一个 Maven 或 Ant 项目。 :)
  • @David Harkness:好吧,只是不确定是否有人认为它是“火焰”:-)
  • 请注意,如果您要共享您的 Eclipse 项目文件,请确保将所有 jar、文件夹等路径作为相对路径保存在其中。您可以通过在任何文本编辑器中打开这些文件来进行检查。
  • 共享代码永远不会坏。如果您想最大限度地提高其他人为它做出贡献的机会,请尽可能简单地开始。如果你能提供一个 Maven 项目,你会增加你的机会。但是在你成功之前不要坚持。
【解决方案2】:

根据我的个人经验,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 才能运行。马文 在构建包时解决此依赖关系。但是当 包已构建,您应该手动提供 log4j 的路径 (使用 java -cp ...) - 如果有什么方法可以消除这个要求 为了方便用户,我只想提供 .sh 和 .cmd 脚本?

Maven 会按照您在 pom.xml 文件中定义的配置处理所有这些事情。如果您的程序需要一些额外的库,maven 会为您下载它,并将其放入包含您的应用程序的包中。例如,如果您的应用程序服务器(log4j JAR)将提供一些依赖项,您还可以设置该依赖项将是 provided 然后,它将可用于运行应用程序,用于单元测试,但它不会出现在最终包装中。

maven 提供的另一个很棒的功能是构建配置文件。例如,您可以在日常开发模式中使用某些设置,但在为生产构建包的情况下,将使用其他设置。

【讨论】:

    【解决方案3】:

    我的目录结构应该是什么样的?像 src、bin 之类的文件夹,还有什么?

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

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

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

    【讨论】:

      【解决方案4】:

      伙计,如果有人想从事公共或 oss 项目,他们可能有足够的 Java 能力来自行设置环境。话虽如此,您的选择是:

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

      b) 检查您的 Eclipse 项目文件,我知道这听起来很愚蠢,但大多数 IDE 都允许您导入 Ecipe 项目。

      c) 编写自述文件! (显然我知道)。

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

      我不会担心项目结构。同样,如果有人想和你一起工作,他们可能足够聪明,可以在不打扰你的情况下启动和运行。我也不担心编译和运行项目,但如果你真的想要,你可以设置 Ant 或 Maven 来做。

      【讨论】:

        【解决方案5】:

        正如 Maven 爱好者所说,Maven 是一种固执己见的软件。他们的意思是,如果你遵守它强加的约定,Maven 将以更少的努力为你做更多的事情。目录结构可能是最重要的一种。我不建议你不先阅读Maven就采用它,你可以开始here

        一旦您整理好使用 Maven 构建项目并采用 m2eclipse 插件让 Maven 与 Eclipse 一起工作,您可能需要查看Maven assembly plugin,您将能够使用它生成一个打包的 zip 文件将您的项目及其所有依赖项和可能的启动脚本放在一起,该脚本负责设置您的 CLASSPATH 而无需调用项目的启动类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多