Java Maven应用程序属性文件的标准约定

Java Maven应用程序属性文件的标准约定,java,maven,netbeans,Java,Maven,Netbeans,我有一个jar类型的maven项目。这是一个作为服务运行的独立JavaSE应用程序。像往常一样,它有自己的app.properties文件,其中包含数据库连接信息等属性。所以这不是一个要上传到maven central的项目,它应该留在我的组织中,在jar旁边有一个属性文件是有意义的 我见过很多地方,人们只是把applicationproperties文件放在src/main/resources中。但那会被复制到罐子里,这绝对是我不想要的 我可以设法让maven将里面的内容复制到src/main

我有一个jar类型的maven项目。这是一个作为服务运行的独立JavaSE应用程序。像往常一样,它有自己的app.properties文件,其中包含数据库连接信息等属性。所以这不是一个要上传到maven central的项目,它应该留在我的组织中,在jar旁边有一个属性文件是有意义的

我见过很多地方,人们只是把applicationproperties文件放在src/main/resources中。但那会被复制到罐子里,这绝对是我不想要的

我可以设法让maven将里面的内容复制到
src/main/external resources/*
中,例如
target/*
,这样当我打包项目时,我就可以轻松地执行
java-jar…
,属性文件就在jar旁边

但这会把Netbeans搞砸,因为Netbeans希望属性文件位于src/main/external资源中

  • 如何在调试时使app.properties文件在IDE的类路径中可用。意味着我可以使用
    新文件(“app.properties”)
  • 当我打包应用程序时,如何使app.properties文件与.jar文件一起使用
  • 基本上,我希望能够在IDE中调试我的程序,并将属性文件与
    新文件(“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插件
    错误的
    配置/
    符合事实的
    解放党/
    
    请注意,我没有