![]() |
1
16
我赞成基于标准的方法。 将您的版本信息(以及其他有用的发布者信息,如内部版本号、颠覆版本号、作者、公司详细信息等)放在jar中 Manifest File . 这是一个记录良好且易于理解的Java规范。 存在强大的工具支持来创建清单文件(a core Ant task 例如,或者 maven jar plugin ).这些可以帮助自动设置一些属性——我已经将maven配置为在构建时将jar的maven版本号、Subversion修订版和时间戳放入清单中。 您可以在运行时使用标准的javaapi调用读取清单的内容,类似于:
对我来说,这感觉像是一种更符合Java标准的方法,因此对于后续的代码维护者来说可能更容易遵循。 |
![]() |
2
11
我记得在一个开源项目中看到过类似的东西:
在模板文件中。使用Ant的过滤副本,您可以给这个宏一个值:
在编译步骤之前,使用此工具在构建过程中创建Version.java源文件。 |
![]() |
3
2
AFAIK没有办法用javac做到这一点。这可以很容易地用Ant完成——我将创建一个名为BuildTimestamp.java的第一类对象,并在编译时通过Ant目标生成该文件。 Here's an Ant type 这将是有益的。 |
![]() |
4
1
除非你想通过C/C++预处理器运行Java源代码(这是一个大禁忌),否则请使用jar方法。还有其他方法可以从jar中获取正确的资源,以确保有人没有在类路径上放置重复的资源。您还可以考虑为此使用Jar清单。我的项目正是使用清单做你想做的事情(包括构建日期、修订、作者等)。 你会想用这个:
这将为您获取类路径上的所有清单。通过解析URL,您可以找出它们可以来自哪个jar。 |
![]() |
5
1
就我个人而言,我会在jar中选择一个单独的属性文件,在运行时加载。..类加载器有一个定义好的搜索文件的顺序——我暂时不记得它是如何工作的,但我认为类路径上某处同名的另一个文件不太可能引起问题。 但另一种方法是,在编译之前,使用Ant将.java文件复制到另一个目录中,并根据需要过滤String常量。你可以使用类似的东西:
并在Ant文件中编写一个过滤器,用构建属性替换它。 |
![]() |
6
1
也许一种更Java风格的指示库版本的方法是将版本号添加到JAR的清单中,如 manifest documentation . |
![]() |
7
0
我不确定让Ant生成文件是否是一个极其恶劣的黑客行为,如果真的是黑客行为的话。为什么不生成一个属性文件并使用 java.util.Properties 处理它? |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 6 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 6 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 6 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 6 月前 |