3

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

我从命令行运行命令“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 程序集产生冲突。

任何帮助深表感谢。

谢谢,扬

4

2 回答 2

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 中包含要注入的值的配置文件。

任何的想法?

于 2009-04-07T18:03:05.697 回答
0

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

mvn clean package -P env-prod

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

于 2009-04-07T22:43:09.143 回答