Java Maven应用程序属性文件的标准约定
我有一个jar类型的maven项目。这是一个作为服务运行的独立JavaSE应用程序。像往常一样,它有自己的app.properties文件,其中包含数据库连接信息等属性。所以这不是一个要上传到maven central的项目,它应该留在我的组织中,在jar旁边有一个属性文件是有意义的 我见过很多地方,人们只是把applicationproperties文件放在src/main/resources中。但那会被复制到罐子里,这绝对是我不想要的 我可以设法让maven将里面的内容复制到Java Maven应用程序属性文件的标准约定,java,maven,netbeans,Java,Maven,Netbeans,我有一个jar类型的maven项目。这是一个作为服务运行的独立JavaSE应用程序。像往常一样,它有自己的app.properties文件,其中包含数据库连接信息等属性。所以这不是一个要上传到maven central的项目,它应该留在我的组织中,在jar旁边有一个属性文件是有意义的 我见过很多地方,人们只是把applicationproperties文件放在src/main/resources中。但那会被复制到罐子里,这绝对是我不想要的 我可以设法让maven将里面的内容复制到src/main
src/main/external resources/*
中,例如target/*
,这样当我打包项目时,我就可以轻松地执行java-jar…
,属性文件就在jar旁边
但这会把Netbeans搞砸,因为Netbeans希望属性文件位于src/main/external资源中
新文件(“app.properties”)
新文件(“app.properties”)
一起使用,然后在打包或组装应用程序时,我希望执行java-jar。。。应用程序仍然可以使用新文件(“app.properties”)
奖金:如果按照惯例这是不可能的,我必须在它周围工作,为什么。。。。maven还没有将此更改到现在吗?实现所需输出的方法可能有很多。假设您有一个app.properties,其默认值应与应用程序一起部署。进一步假设,应用程序中也有许多库 在这种情况下,我们要做的是组装一个包含以下内容的zip文件:
<root>
|
+--- lib/
| |
| +--- [all your libraries here]
|
+--- application.jar (of course named as you want)
|
+--- app.properties
请注意,在加载资源时,您不提供路径(或包,或任何内容)。只是文件名。这是因为文件本身位于类路径的根目录中。例如,当运行测试时,这是因为它直接位于src/test/resources
中
现在,您需要部署应用程序。应用程序不仅包含一个主JAR文件,而且还依赖于许多库JAR文件和一些配置文件,例如app.properties
文件,您希望将这些文件放在主JAR文件之外
Maven的理念是只生成一个工件。因此,为了不影响这一点,您可以创建一个新项目,该项目的目的是创建一个用于部署的ZIP文件。但您也可以(我在许多项目中也这样做)调整项目的POM以生成JAR文件和组装的ZIP文件
POM应包含以下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/zip.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
,它有许多配置选项。描述符元素引用一个描述符文件,它配置如何组装ZIP文件。您还可以使用一些内置配置。阅读文档
最后一步必须是配置jar插件,以便清单包含正确的类路径。例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifestEntries>
<Class-Path>config/</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven jar插件
错误的
配置/
符合事实的
解放党/
注意,我确实将配置文件放入了一个名为config的目录中(仅在生成的ZIP中)。这必须是类路径的一部分
如果您随后将ZIP文件解压缩到任何目录,您可以使用任何喜欢的方法启动程序。最有可能的是一个可运行的JAR,或者一个可执行文件(或者一个脚本)也会出现在您的JAR旁边。实现所需输出的方法可能有很多。假设您有一个app.properties,其默认值应与应用程序一起部署。进一步假设,应用程序中也有许多库
在这种情况下,我们要做的是组装一个包含以下内容的zip文件:
<root>
|
+--- lib/
| |
| +--- [all your libraries here]
|
+--- application.jar (of course named as you want)
|
+--- app.properties
请注意,在加载资源时,您不提供路径(或包,或任何内容)。只是文件名。这是因为文件本身位于类路径的根目录中。例如,当运行测试时,这是因为它直接位于src/test/resources
中
现在,您需要部署应用程序。应用程序不仅包含一个主JAR文件,而且还依赖于许多库JAR文件和一些配置文件,例如app.properties
文件,您希望将这些文件放在主JAR文件之外
Maven的理念是只生成一个工件。因此,为了不影响这一点,您可以创建一个新项目,该项目的目的是创建一个用于部署的ZIP文件。但您也可以(我在许多项目中也这样做)调整项目的POM以生成JAR文件和组装的ZIP文件
POM应包含以下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/zip.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
,它有许多配置选项。描述符元素引用一个描述符文件,它配置如何组装ZIP文件。您还可以使用一些内置配置。阅读文档
最后一步必须是配置jar插件,以便清单包含正确的类路径。例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifestEntries>
<Class-Path>config/</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven jar插件
错误的
配置/
符合事实的
解放党/
请注意,我没有