我有一个使用Swing应用程序框架的Maven项目,并希望将pom.xml中的项目信息注入我的应用程序的全局资源中,以避免重复。
基本应用程序(通过netbeans提供)使用Application.title,Application.version,Application.vendor,Application.description资源等用于Window标题和关于盒子配置,但我找不到以编程方式设置这些值的方法运行时间,我不是一个maven maven所以没有在构建时注入它们的技能。
任何人都有关于如何最好地达到预期结果的任何建议?
答案 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方式更优雅。