`
Lewiss
  • 浏览: 20470 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 打包信息

    博客分类:
  • J2SE
阅读更多
在 java 中,可以在打包是往包里添加包的版本等基本信息,这有助于各版本包之间的协调,在分布式系统中也适用。

在 java 包中添加基本信息有两种方式,一是传统的往包的 MANIFEST.MF 文件中写信息,二是用注解。


1,往 MANIFEST.MF 写信息,包括:
Name 	                The name of the specification.
Specification-Title 	The title of the specification.
Specification-Version 	The version of the specification.
Specification-Vendor 	The vendor of the specification.
Implementation-Title 	The title of the implementation.
Implementation-Version 	The build number of the implementation.
Implementation-Vendor 	The vendor of the implementation.


如,java 的 util 包该文件内容如下:
Name: java/util/
Specification-Title: Java Utility Classes
Specification-Version: 1.2
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: java.util
Implementation-Version: build57
Implementation-Vendor: Sun Microsystems, Inc.


该文件在打包时产生,信息由打包者输入。

以上信息将被 Java 虚拟机自动封装到 Package 对象中。假设包中包含 Test 类,那么用如下语句可以获取该包的信息:
Package	myPackage = Test.class.getPackage();
myPackage.getImplementationVersion()
...



2,用注解添加包的基本信息
在 java 中有几种级别的注解,包括变量级、方法级、类级和包级,我们可以添加包注解,并在注解中添加包基本信息。
对于包级注解,java 做了如下规定:
包注解只能用在文件名为 package-info.java 的源文件中,并且该源文件只有包声明的语句,在包声明语句之前添加注解类,如:
@Annotation1(...)
package sample;


当 java 编译器碰到 package-info.java 文件的时候,它会为该文件产生一个名为 package-info.class 的文件,通过反编译可以看到该文件是一个抽象接口,如:
package sample;

@Annotation1(...)
abstract interface package-info{
}


于是在运行过程中就可以通过该接口获取包级注解了。
可以通过 java.lang.Package 对象来获取包级注解,查看该类的源码,可以看到获取某个特定注解过程如下:
应用程序调用 Package 的 getAnnotation 方法
    /**
     * @throws NullPointerException {@inheritDoc}
     * @since 1.5
     */
    public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
        return getPackageInfo().getAnnotation(annotationClass);
    }

getAnnotation 方法再通过 getPackageInfo() 获得由编译器根据 package-info.java 文件产生的 package-info 接口,从而可以获得所有注解信息

    private Class<?> getPackageInfo() {
        if (packageInfo == null) {
            try {
                packageInfo = Class.forName(pkgName + ".package-info", false, loader);
            } catch (ClassNotFoundException ex) {
                // store a proxy for the package info that has no annotations
                class PackageInfoProxy {}
                packageInfo = PackageInfoProxy.class;
            }
        }
        return packageInfo;
    }


下面,写个简单例子,假设所有代码都在包 sample 下。
由上可以知道需要写的类有:
1.注解类:SampleAnnot.java(可以多个)
2.包级注解存放文件:package-info.java
3.我们再写个 Test.java

注解类:SampleAnnot.java,该类只有一个 field,就是 version

package sample;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface SampleAnnot {
	String version();
}



-------------------------------------------------------------
package-info.java:该文件只有一行包的声明语句和一行注解

@SampleAnnot(version="1.0")
package sample;

-------------------------------------------------------------
Test.java:该文件获取包对象,并从包对象中获取包的注解信息,关于获取过程请参照上面源码分析

package sample;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		// 获取 SampleAnnot 注解
		SampleAnnot sampleAnnot = Test.class.getPackage().getAnnotation(SampleAnnot.class);
		
		// 打印版本信息
		System.out.println(sampleAnnot.version());
	}

}



分享到:
评论
1 楼 小哥1900 2011-04-26  
楼主有前途~~~~据说楼主在501现在说话都大声了很多啊。

相关推荐

    java打包,可以将jdk集成进去

    Java打包技术是将Java应用程序和必要的运行环境(如JDK)整合到一起,使得用户无需安装额外的Java环境即可运行程序。在Java开发过程中,为了方便分发和部署,我们通常会将应用及其依赖打包成一个可执行的格式,比如...

    Java打包成可执行文件步骤详解

    ### Java打包成可执行文件步骤详解 在Java开发过程中,将编写好的程序打包成一个可执行文件是非常常见的需求。这不仅方便程序的分发与部署,还能提高程序的可用性。本文将通过一个具体的示例来详细介绍如何将Java...

    java打包为jar

    在Java开发过程中,将项目打包成可执行的JAR(Java Archive)文件是常见的操作,这使得代码可以方便地分发、部署和运行。本文将详细介绍如何将Java工程打包成可执行的JAR文件。 首先,确保你有一个完整的Java工程,...

    java打包成exe

    ### Java 打包成 EXE 文件详解 #### 一、前言 在 Java 开发领域,将 Java 应用程序打包成 Windows 平台下的可执行文件(.exe)是一种常见的需求,尤其对于非技术背景的用户来说,这种方式极大地简化了软件的部署与...

    基于JAVA的学生信息管理系统打包!

    在这个基于JAVA的学生信息管理系统打包中,我们可以深入探讨几个关键知识点,包括系统设计、编程语言特性、数据库交互以及软件打包与部署。 首先,学生信息管理系统通常包含用户界面、数据处理和存储功能。在Java中...

    java 打包可执行文件

    在Java编程中,将代码打包成可执行文件是常见的需求,尤其在分发软件或部署应用程序时。这个过程通常涉及到JAR(Java Archive)文件的创建,它是一种用于收集多个类文件、相关的元数据和资源文件的容器。下面将详细...

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为使用java打包之后,生成的jar包中图片找不着的。这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成...

    java 打包 classes 为 jar

    6. **bats**:在给定的文件列表中,`bats`可能是一个Bash脚本集合,用于辅助Java项目的构建或测试,与Java打包有关的可能是设置环境变量、执行Ant或Maven命令等。 总的来说,Java打包Classes为JAR是一个综合性的...

    java打包技巧.rar

    Java打包技巧是开发人员在项目开发过程中不可或缺的一部分,它涉及到如何将源代码、资源文件以及依赖库整合到一个可执行的格式,以便于分发、部署和运行。在这个"java打包技巧.rar"压缩包中,我们可以期待找到一些...

    java打包成jar

    根据提供的信息,本文将详细介绍如何通过不同方式将Java程序打包成可执行的JAR文件。 #### 使用`jar`命令手动打包 1. **准备工作**:首先确保所有的`.class`文件位于同一个目录下,例如`D:/chat/`。 2. **创建...

    java打包工具下载

    java打包工具软件下载 nativej-trial.exe

    java打包步骤及相应工具

    Java打包过程是将Java应用程序转换为可执行文件的过程,以便在不依赖Java虚拟机(JVM)的环境中运行。在Java Swing开发的应用程序中,打包成exe文件是一种常见需求,这样用户无需安装JVM即可直接运行。以下是详细的...

    java项目打包工具

    Java项目打包工具是开发人员在完成Java应用程序或Web应用程序开发后,用来整合资源、编译代码、处理依赖、生成可部署文件的重要工具。这些工具帮助开发者将源代码、配置文件、库和其他资源组织成便于分发和运行的...

    java打包jar.pdf

    Java打包和发布的基础是将Java代码打包成JAR(Java Archive)文件,这是一种方便管理和分发Java应用程序的方式。JAR文件本质上是多个.class文件的ZIP压缩格式,它允许开发者将相关的类、资源和元数据组织在一起,...

    最常用的几种Java打包方式总结

    ### 最常用的几种Java打包方式总结 #### 一、引言 在Java开发过程中,将编写的程序打包成可执行文件是十分重要的一个环节。本文旨在详细介绍最常用的几种Java打包方式及其使用的工具,帮助开发者更加方便和轻松地...

    JAVA 打包(jar\tar\zip)源码

    在Java开发过程中,打包是将源代码、资源文件和元数据整理成可执行或可部署格式的重要步骤。这里我们将深入探讨JAVA的打包机制,主要关注jar、tar和zip这三种常见的打包格式,以及如何处理它们的源码。 首先,`jar`...

    java jar 打包成 exe,双击就可以运行

    `Javalauncher`是另一种可能的工具,但这个描述中提到的"javalaunch"可能指的是一个自定义的启动脚本或者特定的打包方法,具体实现细节需要更多信息才能详细解释。 2. **配置文件**:使用`Launch4j`等工具时,你...

    Java打包成exe

    然而,有一种方法可以将Java程序打包成Windows操作系统下的.exe可执行文件,使得用户无需安装JRE也能运行程序。这个过程通常涉及到Java的编译、打包以及使用第三方工具将Java应用转换为.exe格式。 首先,我们需要...

    java打包机,可将jar打包为可执行的exe

    Java打包机是一款便捷的工具,专门用于将Java的.jar文件转换为可执行的.exe文件,使得非Java环境的用户也能方便地运行Java程序。这款工具相比exe4j来说,操作更为简便,对于开发者来说,是一个快速发布Java应用程序...

Global site tag (gtag.js) - Google Analytics