当前位置: 首页 > 知识库问答 >
问题:

为什么Maven JAR插件不包含一些资源?

蔚承天
2023-03-14

我有一个企业应用程序,我正在从Ant构建转换为Maven。它几乎完全转化了;这是我最不需要解决的问题。该应用程序打包为一个EAR文件,其中包含两个WAR,并具有一个JAR模块,该模块提供了应用程序的所有核心功能。

我正在使用Freemarker模板库为应用程序发送的自动电子邮件生成消息体。Freemarker需要它的*。ftl模板文件要放在类路径上,因为这是核心应用程序功能,不是特定于一场战争或另一场战争,所以它需要放在JAR中。

定义JAR的Maven模块具有以下POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <relativePath>../../pom.xml</relativePath>
        <groupId>com.company.project</groupId>
        <artifactId>projectName</artifactId>
        <version>1.8.0</version>
    </parent>

    <artifactId>core</artifactId>
    <packaging>jar</packaging>
    <name>Core Application</name>

    <profiles>
       <!-- snip -->
    </profiles>

    <dependencies>
       <!-- snip -->
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.ftl</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <!-- snip -->
        </plugins>
    </build>
</project>

*. ftl文件位于src/main/资源/模板/中,其中一些位于模板/中的子目录中。src/main/资源中还有其他文件-一些。属性和一些。xml,一些在根目录下,一些在目录结构下。

当我在这个模块(或父模块)上运行包阶段时,作为构建过程的一部分创建的目标/类目录包含模板目录,而模板目录又包含所有的*。ftl,*。xml和*。具有适当目录结构的属性文件。如果我手动将这个目录放入JAR,一切都会很好地工作。

这就是奇怪的地方,我迷路了:当maven-jar-plugin创建JAR时,它包括XML和属性文件,但是JAR中完全没有模板目录,也找不到它的内容。

正如您在上面看到的,我尝试显式包含**/*. ftl。这没有区别;我可以排除整个“包括”标签,并且得到完全相同的行为。

我正在使用Maven 3.0.5和maven-jar插件2.4。

共有1个答案

汲睿
2023-03-14

提交这个问题后,我马上就想出了答案。

在父POM中,我有以下内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <includes>
            <include>**/*.class</include>
            <include>**/*.jdo</include>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
    </configuration>
</plugin>

我添加了**/*. ftl到包含的列表中,现在它正在工作。

编辑:更好的是,我完全删除了配置标签,它仍然在工作。我想这是在我弄清楚之前的残余。属性文件和我在类路径上需要的其他东西需要在src/main/资源中,而不是src/main/java中。

 类似资料:
  • 我见过类似的问题,但他们仍然没有意义,我的猿类大脑。 这里有一个例子。如果我在名为的头文件中声明了一个函数:并且在文件中声明了一个函数:。我在另一个文件(例如)中看到过这样的人,它只包含头,它只有声明(里面没有代码),而不包含带有代码的。但令我震惊的是,当他们调用中的函数时,它使用了中的代码并打印“hello”。怎么做?当我只包含了文件时,它如何打印在文件中添加的“hello”,而它只是一个声明,

  • 问题内容: 我在android上的自定义视图上写。它使用了一些png,作为项目中drawable- folder(我现在将其放在所有drawable文件夹中,只是为了确保)的资源提供。 不幸的是,当我启动该应用程序时,我被强制关闭,日志最后说的是:(十六进制数字是我打算加载的第一个图标)。 现在让我们感到奇怪的是:eclipse adt插件的图形布局编辑器在将显示图标加载到其设计视图中没有任何问题

  • 我正在编写一个小的Java库,其中包含我通常在大多数android应用程序中包含的相关代码。我决定将库导出为一个jar文件,然后将该文件放到我未来项目的libs文件夹中。 null 现在,当我在我的一个android应用程序中使用这个jar时,除了Doc部分之外,所有的一切都像预期的那样运行。当我悬停在我的库的类和方法上时,我看不到我编写的文档注释。 Q1:我是不是又少了一步? Q2:jar文件应

  • 问题内容: 我是球衣和Web服务的新手,我尝试运行一个简单的RESTful Web服务。我遵循了http://www.mkyong.com/webservices/jax-rs/jersey-hello-world- example/, 但是我的项目未使用maven,因此我下载了jersey.1.17.1.jar并将其包含到我的项目路径。 当我想调用该服务时,出现此错误: 这是堆栈跟踪: 这是我的

  • 现在,在这个包中还有许多包私有类,这些类不应该被该规则选择。这些类中的一些实际上被混淆了,无论是在它们自己的名称还是它们的成员名称中,这很好。 相反,有一些实现公共接口的类,它们的类名不会被混淆,而我希望它们应该被混淆。为了完整起见,当它们的成员名不是接口的一部分时,它们的成员名会被有效地混淆。 示例: 我想强调的是,是在其他(保留)类中创建的,并且只通过返回给客户端代码。 如果可能的话,我如何也

  • 为什么在那里插入? 如果没有一个好的理由:我能用什么方法摆脱它吗? 如果您想使用以下示例:https://godbolt.org/z/74ycy63se