Java 为什么getPackage().getSpecificationVersion()在命令行中返回null

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> <

我编写了一个程序来获取软件包的版本号。它在Intellij中运行良好。但是当我在命令行中运行这个jar文件时,返回值为null

我的maven项目

  <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());
    }
}