代码之家  ›  专栏  ›  技术社区  ›  Hai Minh Nguyen

在Maven中,如何从生成的jar中排除资源?

  •  54
  • Hai Minh Nguyen  · 技术社区  · 14 年前

    当我创建一个带有依赖项的可执行jar时(使用 this guide ),所有属性文件也打包到该jar中。如何阻止它的发生?谢谢。

    更新:我试图使用 Maven resources plugin

    更新:谢谢你的有用答案。我想我最好花点时间学习Maven,因为现在我只选择最简单的解决方案。

    8 回复  |  直到 7 年前
        1
  •  11
  •   Mads Hansen    13 年前

    把那些属性文件放到 src/test/resources . 文件 src/测试/资源 eclipse:eclipse 但Maven不会将其包含在打包的JAR中。

        2
  •  107
  •   Luiggi Mendoza    11 年前

    <excludes> 标记pom.xml文件。

    在下一个示例中,所有文件 .properties

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>*.properties</exclude>
                </excludes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
    
        3
  •  17
  •   Romain Linsolas    14 年前

    按照惯例,目录 src/main/resources 包含应用程序将使用的资源。所以马文会把他们列入决赛 JAR .

    因此,在您的应用程序中,您将使用 getResourceAsStream()

    如果需要将它们放在应用程序之外,请不要将它们存储在 因为他们将被马文捆绑。当然,您可以排除它们(使用 奇卡尔 src/main/external-resources )为了保持 src/主要/资源 目录。

    在后一种情况下,您将不得不以JAR文件的形式独立地交付资源(这可以通过使用汇编插件来实现)。如果需要在Eclipse环境中访问它们,请转到 Properties 你的项目,然后 Java Build Path 在里面 Sources 选项卡,添加文件夹(例如 src/主要/外部资源 ). 然后,Eclipse将在类路径中添加此目录。

        4
  •  8
  •   chkal    14 年前
        5
  •  7
  •   Don Cheadle    9 年前

    Maven JAR Plugin

    例如,如果要排除 src/test/resources/ 从最后一个罐子里,放上这个:

    <build>
    
            <plugins>
                <!-- configure JAR build -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.3.1</version>
                    <configuration>
                        <excludes>
                            <exclude>src/test/resources/**</exclude>
                        </excludes>
                    </configuration>
                </plugin>
    
    ...
    

    src/测试/资源/

        6
  •  6
  •   Aleks Andreev Md. Suman Kabir    6 年前

    在使用maven jar插件创建maven jar期间排除文件的特定模式。

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.3</version>
      <configuration>
        <excludes>
          <exclude>**/*.properties</exclude>
          <exclude>**/*.xml</exclude>
          <exclude>**/*.exe</exclude>
          <exclude>**/*.java</exclude>
          <exclude>**/*.xls</exclude>
        </excludes>
      </configuration>
    </plugin>
    
        7
  •  1
  •   Pascal Thivent    14 年前

    哪里的属性文件?你的主罐子?依赖关系?

    在前一种情况下,把资源放在 src/test/resources

    在后面的例子中,您必须创建一个自定义的程序集描述符 excludes/exclude unpackOptions

        8
  •  1
  •   jansohn    8 年前

    另一种可能是使用 Maven Shade Plugin ,例如,要排除仅在IDE中本地使用的日志属性文件:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>${maven-shade-plugin-version}</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>log4j2.xml</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    但是,这将从每个工件中排除文件,因此在每种情况下可能都不可行。