我的问题有3个部分,短,长和额外。我将从短篇小说开始:
是否有任何好的教程/示例如何组装某种典型的(例如apache,如汇编?)我的意思是教程,将解决如何使用eclipse开发应用程序,最后将其转换为漂亮的目录结构,如:
仓
CONF
LIB
LICENSE.TXT
问题的很长一部分是:如何恰当地放置我的log4j.properties而不搞乱我的最终组装?我知道有很多答案,比如“将它放入src / main / resources”,我做了,现在它正在开发中。我将所有配置文件放入src / main / resources中,因为我只是通过classpath(.getClassLoader()。getResourceAsStream(name);)加载配置文件,我认为这是最好的做法。但是当我把它放到src / main / resources文件夹中时,当我运行mvn包时,log4j.properties会被放入jar中。但那不是我想要的。我想拥有漂亮干净的罐子,最后当软件打包时,log4j.properties将位于conf目录中,conf目录将以某种方式位于类路径上。
其他问题是:我通过classpath解决配置加载的方法是否合适?我的想法是,我想避免遇到开发/生产路径差异的问题。当我假设配置将在CP上时,一切都变得容易了。
答案 0 :(得分:1)
我将在最后一部分评论如何加载配置文件。将配置文件放入类路径在Java中使用相当广泛。如果在部署时修复配置并且文件可以嵌入到jar中,这很有效,但根据我的经验,如果稍后要更改配置,则会产生比解决方案更多的麻烦。
这主要有两个原因。首先,它更难以确切地知道实际使用的配置文件和调试配置问题。类路径中可能包含多个目录,jar中可能有文件(或另一个jar中)等等。类加载是Java中比较困难的主题之一,而classloading和classpath通常对于那些应该使用的人来说是一个不透明的主题。实际上改变了配置。最好有一个配置文件所在的固定位置,用这个位置在日志文件中写一行,如果文件丢失则创建错误。
其次,类路径中的配置文件有时会放在与读取文件的类匹配的包中。这是类路径资源的自然和最佳实践,但它要求您在配置所在的目录中创建一组匹配的文件夹。这使得那些应该创建或编辑文件的人更加困难。
Log4j为您提供了一个选项,您可以在启动Java时在命令行上指定log4j文件。我总是使用该选项来指定log4j配置文件的确切位置。
答案 1 :(得分:1)
使用maven-assembly-plugin通过合并依赖项,类,src,资源和工件来创建存档。