0

我必须将 Java EE 应用程序分发到 Windows 和 Linux。应用程序在 WEB-INF/bin 文件夹中有几个系统相关文件(dll 等)

我正在尝试这种方法。

项目文件夹树是这样的:

  • 项目
    -- src
    ---- main
    ---- java ------
    webapp
    -------- ...
    -------- WEB-INF --------
    ---- bin(现在是一个空文件夹)
    --目标

我已将所有 bin 文件移至:

  • 项目
    -- distrib
    ---- bin
    ------ win
    ------ linux

在第一步中,我尝试将 Maven 配置为将 distrib/bin/win 复制到目标文件夹中的 WEB-INF/bin

在第二步中,当第一个工作时,我将添加两个配置文件,一个用于 Windows,另一个用于 linux。

在我的 pom.xml 我放了这些行:

<build>
    <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <executions>
            <execution>
              <id>distro-assembly</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
              <configuration>
                <descriptors>
                  <descriptor>distrib/bin.xml</descriptor>
                </descriptors>
              </configuration>
            </execution>
          </executions>
        </plugin>
    </plugins>

在这里你有 bin.xml 源:

    <assembly 
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd" >
  <id>webtop10.2_bin</id>
  <fileSets>
    <fileSet>
      <directory>${project.build.directory}/distrib/bin/win</directory>
      <outputDirectory>/WEB-INF/bin</outputDirectory>
      <includes>
          <include>*.*</include>
      </includes>
      <fileMode>0750</fileMode>
      <directoryMode>0755</directoryMode>
      <lineEnding>keep</lineEnding>
    </fileSet>
  </fileSets>
</assembly>

当我执行 mvn package 构建成功但文件没有复制到 WEB-INF/bin 文件夹。组装插件说:

[INFO] --- maven-assembly-plugin:2.2-beta-5:single (distro-assembly) @ sibila ---
[INFO] Reading assembly descriptor: distrib/bin.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

我是 Maven 的新手,所以我需要帮助。

4

2 回答 2

1

您说要复制的文件位于 中project/distrib/bin/win,但您的程序集描述符的文件集正在从 中复制${project.build.directory}/distrib/bin/win。除非您在 POM 中更改了项目的构建目录,${project.build.directory}否则project/target. 程序集文件集中的目录可能应该是 just distrib/bin/win,因为我相信该目录是相对于项目基础的:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>webtop10.2_bin</id>
    <fileSets>
        <fileSet>
            <directory>distrib/bin/win</directory>

            ...

        </fileset>
    </fileSets>
</assembly>
于 2012-11-07T18:44:28.523 回答
1

如果您只想将二进制文件复制到WEB-INF/bin战争中的文件夹中,那么我认为您根本不应该使用maven-assembly-plugin

这是一个更简单的方法:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <webResources>
                    <resource>
                        <directory>distrib/win</directory>
                        <targetPath>WEB-INF/bin</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
</build>

这可以专门用于构建配置文件,以便您选择 windows 或 linux 二进制文件。

于 2012-11-08T09:57:23.317 回答