我一直在为我的“家庭项目”使用Java一段时间,现在需要通过github或Google Code这样的存储库来提供我的一些项目。
只要我是该项目的唯一开发人员,并且只要我一直在Eclipse中工作,那么完全没有关于构建和运行它的问题。一切都很好。问题基本上是,如果有人要我分享,我该怎么办? : - )
要做的第一件事是,使用像Maven这样的工具来构建项目。在这种情况下,无论是否安装了Eclipse,或者更喜欢IDEA,他都可以下载我的项目并使用Maven构建。或者,导入Eclipse / IDEA并构建。
所以,澄清这个问题,这里有两点:
java -cp ...
) - 如果我只想提供.sh和.cmd脚本以方便用户,那么消除这个要求的方法是什么? 答案 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)
message.properties
文件服务国际化还有其他目录,例如src / main / webapp - 所有这些目录都在maven文档中描述。
我的应用程序应该运行的方式是什么?对于 例如,我的应用程序需要log4j才能运行。 Maven的 在构建包时解决此依赖关系。但当时 包是构建的,你应该手动提供log4j的路径 (使用java -cp ...) - 如果消除此要求的方法是什么 我想提供.sh和.cmd脚本以方便用户使用?
按照 pom.xml 文件中定义的配置,Maven会处理所有这些事情。如果你的程序需要一些额外的库,maven会为你下载它,并放在包含你的应用程序的包中。例如,如果您的应用程序服务器(log4j JAR)将提供某些依赖项,您还可以设置依赖项将提供然后,它将可用于运行应用程序,用于单元测试,但它不会成为最终包中的地方。
maven提供的其他强大功能是构建配置文件。例如,您可以在日常开发模式中使用某些设置,但是如果要构建用于生产的包,则将使用其他设置。