Java 从POM文件获取artifactId出错

Java 从POM文件获取artifactId出错,java,maven,spring-boot,pom.xml,Java,Maven,Spring Boot,Pom.xml,为了获取项目中的artifactId,我使用以下代码 public static void main(String[] args) { Properties prop = new Properties(); InputStream in = null; try { String fileName = "application.properties"; in = ConfigServiceApplication.class.getClas

为了获取项目中的artifactId,我使用以下代码

public static void main(String[] args) {
    Properties prop = new Properties();
    InputStream in = null;

    try {
        String fileName = "application.properties"; 
        in = ConfigServiceApplication.class.getClassLoader().getResourceAsStream(fileName);
        prop.load(in);
        SpringApplication.run(ConfigServiceApplication.class, args);
        System.out.println(prop.getProperty("prop.name");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
My application.properties包含以下内容:

prop.name=${project.artifactId}
如果一切正常运行,预期输出为:

config-service //this is my artifactId
但是当我运行上面的代码时得到的输出是

${project.artifactId}
我引用了这些链接来获取信息:,

有人能更正我的代码以正确获取artifactId吗

编辑: Pom文件:

<project>
...
     <artifactId>config-service</artifactId>
     ...
     <properties>
         <name>${project.artifactId}</name>
     </properties>
     ...
     <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
     </build>
     ...
</project>

...
配置服务
...
${project.artifactId}
...
src/main/resources
真的
...

我认为目录结构或运行代码的方式存在问题,因为配置看起来正常

见下面的小例子

# assumed structure
pom.xml
src/main/java/sub/optimal/mvnproperties/Main.java
src/main/resources/application.properties
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>sub.optimal</groupId>
    <artifactId>config-service</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>
src/main/resources/application.properties

prop.name=${project.artifactId}
application.name=${pom.name}
现在编译并执行它

mvn clean compile
mvn exec:java -Dexec.mainClass=sub.optimal.mvnproperties.Main

在这两种情况下,属性的输出都是相同的

prop.name:config-service
application.name:config-service

您能否在配置资源的地方共享部分pom?你在应用maven过滤吗?@A.DiMatteo我已经更新了主帖子中的POM文件。你是如何运行主类的?maven生成是否将属性文件中的令牌替换为target/classes文件夹的一部分?@a.DiMatteo我以错误的方式运行。我遵循了下面的回答。问题是我跑步的方式。我按照你说的去做,而且执行正确。非常感谢。
mvn clean package
java -cp target/config-service-1.0-SNAPSHOT.jar sub.optimal.mvnproperties.Main
prop.name:config-service
application.name:config-service