【问题标题】:Maven Assembly generationMaven 程序集生成
【发布时间】:2010-10-17 10:53:40
【问题描述】:

目前正在尝试以这样一种方式打包一个小型应用,以便我们的运维团队能够更轻松地部署它。 我的要求是对项目进行编译和压缩。

我从命令行运行命令“mvn -DmyProfile clean generate-sources package”,并创建了一个 src.xml 文件,该文件详细说明了除了声明使用 zip 格式进行输出外,哪个文件应该放在哪里。

因此,我在目标文件夹中获得了 2 个文件,一个 jar 文件和一个 zip 文件。 zip 文件的结构完全符合我的需要,除了我的属性文件没有从 POM 中注入正确的值。相反,所有的 {variables} 仍然存在。 另一方面,jar 似乎注入了所有正确的值,但 jar 的结构不是我需要的。

问题是这个问题只是因为我尝试将 Java Service Wrapper 添加到我的项目中并且需要 src.xml 文件来声明所有新文件应该在项目文件夹结构中的位置。在此之前,完全相同的命令可以完美运行,甚至 jar 结构与 Eclipse 中的实际项目结构更加一致。

不怪 Java 服务包装器,只是想知道是否通过尝试让所有东西都为该部分工作,我没有与 MVN 程序集产生冲突。

非常感谢任何帮助。

谢谢, 亚恩

【问题讨论】:

  • 是否有机会粘贴 pom 的相关部分(如果需要,使用虚拟值)。

标签: maven-2 maven-plugin


【解决方案1】:

事实证明,Maven 创建了一个“快照”jar,该 jar 包含在 Zip 存档内的 lib 文件夹中。该快照 jar 包含注入正确值的配置文件。换句话说,如果您使用类加载器而不是文件系统引用加载配置文件,它应该可以工作。

无论如何,我被告知不要将配置文件放在 Zip 存档的根目录下。因此,在我的情况下,Maven 只是在存档中推送而不注入它们的配置文件甚至不应该放在首位。

但这里是包含在 pom.xml 中的 src.xml 文件的新内容:

<assembly>
<id>bin</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
    <format>zip</format>
</formats>
<fileSets>
    <fileSet>
        <directory>src/main/bin</directory>
        <outputDirectory>/bin</outputDirectory>
        <includes>
            <include>**/*.sh</include>
        </includes>
        <fileMode>777</fileMode>
    </fileSet>
    <fileSet>
        <directory>lib</directory>
        <outputDirectory>/lib</outputDirectory>
        <includes>
            <include>**/*.jar</include>
        </includes>
    </fileSet>
    <!-- Wrapper files -->
    <fileSet>
        <directory>lib/wrapper</directory>
        <outputDirectory>/lib</outputDirectory>
        <includes>
            <include>**/*</include>
        </includes>
    </fileSet>
    <fileSet>
        <directory>src/main/bin/wrapper</directory>
        <outputDirectory>/bin/wrapper</outputDirectory>
        <includes>
            <include>**/*</include>
        </includes>
        <fileMode>777</fileMode>
    </fileSet>
    <fileSet>
        <directory>src/main/conf</directory>
        <outputDirectory>conf</outputDirectory>
        <includes>
            <include>**/*</include>
        </includes>
    </fileSet>
</fileSets>
<dependencySets>
    <dependencySet>
        <outputDirectory>/lib</outputDirectory>
        <includes>
            <include>*:jar:*</include>
        </includes>
        <excludes>
            <exclude>*:sources</exclude>
        </excludes>
    </dependencySet>
</dependencySets></assembly>

这仍然会输出一个 jar 和一个 zip 存档,但由于 zip 包含快照 jar,现在一切都应该没问题了。

除了...(这可能是另一篇文章,所以如果我跑题了,请告诉我)

在配置文件中注入的值不是来自我的 POM.xml 中的配置文件的值。它们是我的 settings.xml 中的那些,它们位于我的 .m2 文件夹中。但是在 settings.xml 配置文件中关闭激活似乎并不能解决这个问题:

<activation>
<activeByDefault>false</activeByDefault>
</activation>

这里又是我运行的命令行:

mvn -Denv-prod clean generate-sources package

其中“env-prod”是 pom.xml 中包含要注入的值的配置文件。

有什么想法吗?

【讨论】:

    【解决方案2】:

    好的,我找到了第二个问题的答案。 maven命令出错,我执行成功的是:

    mvn clean package -P env-prod
    

    这会将正确的值放在我的配置文件中的正确位置。请注意使用开关 -P 而不是 -D 来选择配置文件。

    【讨论】:

    • -D 定义了一个属性,可以选择使用它来触发配置文件激活。 -P 直接激活配置文件,不管 pom.xml 中的激活规则有什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2011-03-16
    • 2016-11-06
    • 2016-03-12
    • 1970-01-01
    • 2020-08-23
    • 2013-04-05
    相关资源
    最近更新 更多