将Maven项目信息注入Swing Application Framework资源?

时间:2009-05-13 11:55:54

标签: java swing maven-2 appframework

我有一个使用Swing应用程序框架的Maven项目,并希望将pom.xml中的项目信息注入我的应用程序的全局资源中,以避免重复。

基本应用程序(通过netbeans提供)使用Application.title,Application.version,Application.vendor,Application.description资源等用于Window标题和关于盒子配置,但我找不到以编程方式设置这些值的方法运行时间,我不是一个maven maven所以没有在构建时注入它们的技能。

任何人都有关于如何最好地达到预期结果的任何建议?

4 个答案:

答案 0 :(得分:4)

您可以尝试使用filtered resources。如果您创建属性文件,请说出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,但这可能没有您需要的所有信息。

答案 1 :(得分:1)

您可以将它们保存在separte属性文件中,并从pom.xml和您的应用程序中读取它。

另一种选择是从类路径读取pom.xml文件(mvn将它放在META-INF文件夹中)并从那里解析为普通的xml文件。

我会选择第一个选项。

答案 2 :(得分:0)

我会尝试使用maven-antrun-plugin。将必要的maven属性传递给ant并创建一个ant构建脚本,该脚本直接修改应用程序属性文件或弹簧上下文配置。

答案 3 :(得分:0)

另一种方法是使用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方式更优雅。