gpt4 book ai didi

java - 如何设置包版本

转载 作者:行者123 更新时间:2023-11-30 06:12:53 24 4
gpt4 key购买 nike

这是 /META-INF/MANIFEST.MF:

Manifest-Version: 1.0
Created-By: peter
Name: foo/
Implementation-Version: foo1
Name: bar/
Implementation-Version: bar1

这是类

package foo;
public class FooTest {
}

package bar;
public class BarTest {
}

package test;
public class Test {
public static void main (String[] args){
System.out.println(FooTest.class.getPackage().getImplementationVersion());
System.out.println(BarTest.class.getPackage().getImplementationVersion());
}
}

但是它打印

bar1
bar1

最佳答案

您可能需要按如下方式设置 ClassLoader Additions

1.5.7 java.lang.ClassLoader 添加

为了支持包,类加载器被扩展以跟踪从类到包的映射,并允许类加载器为它们加载的类定义包实例。定义了额外的方法以允许子类在该类加载器中定义包,以允许 Package 实现获取有关该类加载器定义的包的信息。

java.lang.Package 实现需要识别当前的类加载器以便从系统代码中调用它。

package java.lang;
public class ClassLoader {
...
// Return the non-null classloader of callers
public static ClassLoader currentClassLoader();
// Define a Package
protected Package(String pkgname,
String spectitle, String specversion,
String specvendor, String impltitle,
String implversion, String implvendor);
}

即使从系统类中调用,currentClassLoader 方法也用于查找当前的 ClassLoader。当从类加载器加载的类调用时,它将返回 this.getClass().getClassLoader() 的等价物。它的行为与当前的 SecurityManager.currentClassLoader 方法相同,但是是公共(public)的。

子类使用 protected 访问 definePackage 方法来定义它正在加载的类的包。具有给定名称的包只能定义一次,并且必须在加载该包的第一个类之前定义。如果可用,类加载器应提供 list 中的版本控制属性。

您可以使用以下示例进行版本控制

Name: java/util/
Specification-Title: Java Utility Classes
Specification-Version: 1.2
Specification-Vendor: Example Tech, Inc.
Implementation-Title: java.util
Implementation-Version: build57
Implementation-Vendor: Example Tech, Inc.

您可以在 https://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html 引用包版本控制的标准文档。

创建jar然后尝试访问

jar cfm MyJar.jar Manifest.txt MyPackage/*.class

访问它的 API 解释为 https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp89936

关于java - 如何设置包版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com