簡體   English   中英

是否將Maven項目信息注入Swing應用程序框架資源?

[英]Injecting Maven project information into Swing Application Framework resources?

我有一個使用Swing應用程序框架的Maven項目,並希望將pom.xml中的項目信息注入到我的應用程序的全局資源中,以避免重復。

基本應用程序(通過netbeans提供)使用Application.title,Application.version,Application.vendor,Application.description資源等獲取Window標題以及有關框配置的信息,但我找不到在運行時以編程方式設置這些值的方法,我不是行家,所以沒有在構建時注入它們的技能。

任何人都對如何最好地達到預期結果有任何建議?

您可以嘗試使用過濾的資源 如果創建屬性文件,請說src/main/resources/com/myapp/app.properties ,如下所示:

version=${project.version}
name=${project.name}
id=${project.artifactId}

您需要在pom.xml啟用過濾:

<build>
  <resources>
    <resource>src/main/resources</resource>
    <filtering>true</filtering>
  </resources>
</build>

現在,當maven構建項目時,它將擴展屬性文件,並將其放置在類路徑中。 然后,您只需調用getResourceAsStream(“ / com / myapp / app.properties”)即可將其讀入您的應用程序。

Whist maven會自動創建文件/META-INF/maven/$groupId/$artifactId/pom.properties ,此文件可能沒有您需要的所有信息。

您可以將它們保留在separte屬性文件中,並從pom.xml和您的應用程序中讀取它。

另一種選擇是從類路徑中讀取pom.xml文件(mvn會將其放在META-INF文件夾中),然后從那里解析為純XML文件。

我會選擇第一個。

另一種方法是使用properties-maven-plugin生成一個單獨的屬性文件,然后將此屬性文件添加到應用程序包名稱中:

pom.xml編寫application.properties文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-2</version>
            <executions>
                <execution>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>write-project-properties</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <outputFile>${project.build.outputDirectory}/application.properties</outputFile>
            </configuration>
        </plugin>
        ...
    </plugins>
    ...
</build>

對於包括application.properties到應用程序:

public class MyApplication extends SingleFrameApplication

    public MyApplication() {
        super();
        addGeneratedApplicationProperties();
    }

    private void addGeneratedApplicationProperties() {
        ResourceManager resourceManager = getContext().getResourceManager();
        getContext().setApplicationClass(MyApplication.class);
        List<String> bundleNames = new LinkedList<String>(resourceManager.getApplicationBundleNames());
        bundleNames.add(0, "application");
        resourceManager.setApplicationBundleNames(bundleNames);
    }

    ...
}

但是,我發現maven-filter-solution方法更優雅。

我會嘗試使用maven-antrun-plugin。 將必要的maven屬性傳遞給ant並創建一個ant構建腳本,該腳本可以直接修改應用程序屬性文件或spring上下文配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM