1

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

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

有人对如何最好地达到预期结果有任何建议吗?

4

4 回答 4

4

您可以尝试使用过滤资源。如果您创建一个属性文件,请说它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,这可能没有您需要的所有信息。

于 2009-11-04T21:45:32.077 回答
1

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

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

我会选择第一个选项。

于 2009-05-13T12:07:25.810 回答
0

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

于 2009-05-13T12:09:08.163 回答
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 方式更优雅。

于 2012-08-15T09:27:35.517 回答