Java 为什么getPackage().getSpecificationVersion()在命令行中返回null
我编写了一个程序来获取软件包的版本号。它在Intellij中运行良好。但是当我在命令行中运行这个jar文件时,返回值为null 我的maven项目Java 为什么getPackage().getSpecificationVersion()在命令行中返回null,java,maven,classloader,Java,Maven,Classloader,我编写了一个程序来获取软件包的版本号。它在Intellij中运行良好。但是当我在命令行中运行这个jar文件时,返回值为null 我的maven项目 <groupId>com.client.version</groupId> <artifactId>version-specification</artifactId> <version>1.0</version> <build> <
<groupId>com.client.version</groupId>
<artifactId>version-specification</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<Build-Number>${project.version}</Build-Number>
<Timestamp>yyyy-MM-dd HH:mm:ss</Timestamp>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
我创建了另一个项目
<groupId>com.client.test</groupId>
<artifactId>test-version</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.client.version</groupId>
<artifactId>version-specification</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
当我在IntelliJ中运行这个程序时,输出是1.0
。
但是当我打包一个jar文件并在命令行中运行这个主要方法时
java-cp-target/test-version-1.0-SNAPSHOT.jar test.test
,输出为null
,为什么?这是由于类加载器引起的。Intellij在非打包状态下运行一切。在另一种情况下,您打包了这个文件,然后希望在没有类路径的情况下获取一些信息,因此得到null
<groupId>com.client.test</groupId>
<artifactId>test-version</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.client.version</groupId>
<artifactId>version-specification</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
public class test {
public static void main(String[] args) {
System.out.println(ClientVersion.getCurrentVersion());
}
}