Java代码文件包含@author和@version标记。 version标签包含有关文件修订号的信息。此信息位于评论中。 是否有可用的编译标志或其他机制,我可以将此信息添加到.class文件中?
答案 0 :(得分:0)
简短回答: 编译器将JavaDoc忽略为所有其他形式的注释。
答案很长:
您需要编写一个应用程序来复制类/方法声明之上的现有@author AuthorName
和@version VersionString
javadoc元素,例如:
@Author({"AuthorName", "OtherAuthor"})
@Version("VersionString")
public class Something [...] { [...] }
示例Author
注释可以是:
@Author("afk5min")
@Target({ ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
public @interface Author {
String[] value();
}
这样,每个注释都存在于生成的类文件中,并且可以被访问。
9.6.3.2。 @retention
注释可能仅存在于源代码中,或者它们可能以类或接口的二进制形式存在。二进制形式中存在的注释可能在运行时通过Java SE平台的反射库提供,也可能不提供。注释类型java.lang.annotation.Retention用于在这些可能性中进行选择。
此外,如果您希望对注释进行运行时访问,则可以指定RetentionPolicy.RUNTIME
。反射API允许这样:
Author.class.getAnnotation(Author.class).value()[0] -> "afk5min"
答案 1 :(得分:0)
有一次,我修改了我的Ant构建脚本,以创建一个带有版本号的MANIFEST.MF文件,以及其他信息。
这是最新的MANIFEST.MF文件,
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 19.0-b09 (Sun Microsystems Inc.)
Main-Class: gov.bop.svnreport.SVNReportMain
Built-By: Gilbert G. Le Blanc
Built-On: 20111109-1437
Version: 1.1.1
Specification-Title: Subversion Commit Report
Specification-Version: 1.1.1
Specification-Vendor: Federal Bureau of Prisons
Class-Path: svnkit.jar
这是Ant脚本中的JAR目标。
<target name="jar" depends="compile">
<mkdir dir = "${jar}"/>
<echo>Jar directory - "${jar}"</echo>
<manifest file="META-INF/MANIFEST.MF">
<attribute name="Main-Class" value="gov.bop.svnreport.SVNReportMain"/>
<attribute name="Class-Path" value="svnkit.jar"/>
<!-- This line puts your username into the manifest.
Maybe you don't want to do that. -->
<attribute name="Built-By" value="Gilbert G. Le Blanc"/>
<attribute name="Built-On" value="${DSTAMP}-${TSTAMP}"/>
<!-- This property was set by the svn-info task -->
<!-- <attribute name="Revision" value="${svnrevision}"/> -->
<!-- This property comes from the build.properties file -->
<attribute name="Version" value="${app.version}"/>
<attribute name="Specification-Title" value="Subversion Commit Report"/>
<attribute name="Specification-Version" value="${app.version}"/>
<attribute name="Specification-Vendor" value="Federal Bureau of Prisons"/>
</manifest>
<jar jarfile="${jar}/${ant.project.name}.jar"
manifest="META-INF/MANIFEST.MF">
<fileset dir="${build}/">
<patternset refid="all-classes"/>
</fileset>
<fileset dir="." includes="${bin.includes}/"/>
</jar>
<copy file="${jar}/${ant.project.name}.jar" todir="${deploy}" />
<copy file="${svnkit}" todir="${deploy}" />
</target>
我试图将Subversion版本号放入MANIFEST.MF文件中,但我无法使用它。
此方法的一个问题是它仅在从JAR文件执行Java应用程序时有效。如果您尝试从Eclipse(如Eclipse)中提取这些清单属性,则会返回null
值。