• Maven入门_如何向JAR添加资源&标准目录布局的介绍(部分翻译)


    如何向JAR添加资源

    原文链接:https://maven.apache.org/guides/getting-started/index.html#How_do_I_add_resources_to_my_JAR

    另一个可以满足的不需要对上面的POM进行更改的常见用例是将资源打包到JAR文件中。对于这个常见的任务,Maven再次依赖于标准目录布局(Standard Directory Layout),这意味着通过使用标准的Maven约定,您可以将资源打包到JAR中,只需将这些资源放置在一个标准的目录结构中。

    您可以在下面的示例中看到,我们已经添加了目录${basedir}/src/main/resources,我们将想要打包到JAR中的任何资源放在这个目录中。Maven使用的简单规则是:任何放在${basedir}/src/main/resources目录中的目录或文件都被打包到JAR中,从JAR的底部开始使用完全相同的结构。

    my-app
    |-- pom.xml
    `-- src
        |-- main
        |   |-- java
        |   |   `-- com
        |   |       `-- mycompany
        |   |           `-- app
        |   |               `-- App.java
        |   `-- resources
        |       `-- META-INF
        |           `-- application.properties
        `-- test
            `-- java
                `-- com
                    `-- mycompany
                        `-- app
                            `-- AppTest.java

    因此,在我们的示例中可以看到,我们在那个目录下有一个带有application.properties文件的META-INF目录。如果你打开Maven为你创建的JAR,看一看,你会看到以下内容:

    |-- META-INF
    |   |-- MANIFEST.MF
    |   |-- application.properties
    |   `-- maven
    |       `-- com.mycompany.app
    |           `-- my-app
    |               |-- pom.properties
    |               `-- pom.xml
    `-- com
        `-- mycompany
            `-- app
                `-- App.class

    如您所见,${basedir}/src/main/resources的内容可以从JAR底部开始找到,并且我们的 application.properties 文件在 META-INF 目录中。您还会注意到其他一些文件,如 META-INF/MANIFEST.MF 以及一个 pom.xmlpom.properties 文件。这些都是Maven中生成JAR时的标准配置。如果您愿意,您可以创建自己的清单(manifest),但如果不这样做,Maven将默认生成一个清单。(您也可以修改默认清单中的条目。我们将在稍后讨论这个问题。)。pom.xml 和 pom.properties 文件打包在JAR中,这样Maven生成的每个工件(artifact)都是自描述的,并且还允许您在需要时在自己的应用程序中使用元数据(metadata)。一个简单的用途可能是检索应用程序的版本。操作POM文件需要使用一些Maven工具,但属性(the properties)可以使用标准的Java API,如下所示:

    #Generated by Maven
    #Tue Oct 04 15:43:21 GMT-05:00 2005
    version=1.0-SNAPSHOT
    groupId=com.mycompany.app
    artifactId=my-app

    要将资源添加到单元测试的类路径中,除了将资源放置在 ${basedir}/src/test/resources 目录之外,您需要遵循与将资源添加到JAR相同的模式。在这一点上,你会有一个项目目录结构,看起来像下面:

    my-app
    |-- pom.xml
    `-- src
        |-- main
        |   |-- java
        |   |   `-- com
        |   |       `-- mycompany
        |   |           `-- app
        |   |               `-- App.java
        |   `-- resources
        |       `-- META-INF
        |           |-- application.properties
        `-- test
            |-- java
            |   `-- com
            |       `-- mycompany
            |           `-- app
            |               `-- AppTest.java
            `-- resources
                `-- test.properties

    在单元测试中,你可以使用如下简单的代码片段来访问测试所需的资源:

    1 ...
    2  
    3 // Retrieve resource
    4 InputStream is = getClass().getResourceAsStream( "/test.properties" );
    5  
    6 // Do something with the resource
    7  
    8 ...

    标准目录布局的介绍

    拥有一个通用的目录布局,可以让熟悉一个Maven项目的用户立即熟悉另一个Maven项目。 The advantages are analogous to adopting a site-wide look-and-feel.

    下一节记录Maven期望的目录布局和Maven创建的目录布局。尽量遵循这个结构。但是,如果不能,这些设置可以通过项目描述符( the project descriptor)重写。

    src/main/java Application/Library sources
    src/main/resources Application/Library resources
    src/main/filters Resource filter files
    src/main/webapp Web application sources
    src/test/java Test sources
    src/test/resources Test resources
    src/test/filters Test resource filter files
    src/it Integration Tests (primarily for plugins)
    src/assembly Assembly descriptors
    src/site Site
    LICENSE.txt Project's license
    NOTICE.txt Notices and attributions required by libraries that the project depends on
    README.txt Project's readme

    在顶层,描述项目的文件:一个pom.xml文件。此外,还有一些文本文档,用户可以在收到源代码后立即阅读:README.txtLICENSE.txt等。

    这个结构只有两个子目录:srctarget。这里唯一需要的其他目录是像CVS.git.svn这样的元数据(metadata ),以及多项目构建中的任何子项目(每个子项目都将如上所示)。

    target目录用于存放构建的所有输出。

    src目录包含了所有用于构建项目的源材料,它的站点等等。它包含每种类型的子目录:main用于主构建工件(the main build artifact),test用于单元测试代码和资源,site等等。

    在工件产生源目录( artifact producing source directories,例如 main test),一个目录用于Java语言(正常的包层次结构存在于此),另一个目录用于资源(给定默认资源定义,该结构被复制到目标类路径)。

    如果对工件构建(the artifact build)有其他起作用的源,它们将在其他子目录下。例如,src/main/antlr会包含antlr语法定义文件。

  • 相关阅读:
    备忘:java在cmd中编译运行
    Java基础学习 —— 对象的克隆
    将博客搬至CSDN
    jenkins节点管理中没有默认没有Launch agent via Java Web Start
    postman 集成ci
    postman初级使用
    jmeter分布式压测实践及踩坑记录(linux压力机)
    jmeter监控服务器cpu、内存等
    jmeter跨线程组传递token实践
    初识jmeter
  • 原文地址:https://www.cnblogs.com/xkxf/p/15846093.html
Copyright © 2020-2023  润新知