代码之家  ›  专栏  ›  技术社区  ›  Sebastian J.

Maven:如何管理特定于平台的文件,如startscripts(而不是库)

  •  1
  • Sebastian J.  · 技术社区  · 14 年前

    我有一个Java项目,由三个模块组成

    • 共同项目
    • 项目A
    • 项目B

    项目A和项目B使用-通用作为依赖项。

    我使用一个简单的组装配置将项目A、项目B和所有相关库(Spring等)放在一个归档文件中。

    我还想为不同的平台(windows32、windows64、linux32、linux64和macosx)提供startscripts。 例如,我将在Linux中使用Windows Winrun4j和sh脚本。

    管理这些文件的最佳方法是什么(因为它们不需要任何编译等,比如本机库)?

    目前,我把每个项目的启动文件放在它的/main/resources/bin文件夹中,导致一个程序集都是所有平台的启动脚本。

    为什么要将这些启动文件移动到专用模块中,并对它们进行管理,以便能够构建“特定于平台的”程序集,其中只包括给定平台的启动文件?

    2 回复  |  直到 11 年前
        1
  •  5
  •   Community Dan Abramov    7 年前

    您可以使用配置文件激活和OS检测:

    <profiles>
        <profile>
            <activation>
                <os>
                    <family>windows</family>
                    <arch>x86</arch>
                </os>
            </activation>
            ....
        </profile>
    </profiles>
    

    资源:

    关于同一主题:

        2
  •  1
  •   Pascal Thivent    14 年前

    为什么要将这些startfile移动到专用模块中并对它们进行管理,从而能够构建“特定于平台的”程序集,其中只包括给定平台的startfile?

    如果启动脚本只是平台特定的(而不是代码),那么我就不需要构建平台特定的程序集,只需要将它们捆绑在一起。

    构建特定于平台的程序集将使构建更复杂、更难维护、运行时间更长,所有这些 没有为用户提供更多附加值 . 这似乎不值得。

    事实上,这并不是大多数项目都在做的,例如:

    Tomcat(简单情况)

    有了Tomcat,你们两个都可以 .sh .bat 中的脚本版本 bin 目录

    pascal@laptop:~$ cd ~/opt/apache-tomcat-6.0.29/bin
    pascal@laptop:~/opt/apache-tomcat-6.0.29/bin$  ls
    bootstrap.jar       digest.bat        shutdown.sh           tool-wrapper.sh
    catalina.bat        digest.sh         startup.bat           version.bat
    catalina.sh         jsvc.tar.gz       startup.sh            version.sh
    catalina-tasks.xml  setclasspath.bat  tomcat-juli.jar
    commons-daemon.jar  setclasspath.sh   tomcat-native.tar.gz
    cpappend.bat        shutdown.bat      tool-wrapper.bat
    

    声纳(复杂情况)

    Sonar 可能是一个更好的例子,类似于您的情况。声纳 箱子 目录包含特定于平台的子目录,其中包含每个平台的脚本:

    pascal@laptop:~$ cd ~/opt/sonar-2.2/bin/
    pascal@laptop:~/opt/sonar-2.2/bin$ ls
    aix-ppc-32      hpux-parisc-64  linux-x86-64         solaris-x86-32
    aix-ppc-64      linux-ia-64     macosx-universal-32  solaris-x86-64
    hpux-ia-32      linux-ppc-32    macosx-universal-64  windows-x86-32
    hpux-ia-64      linux-ppc-64    solaris-sparc-32
    hpux-parisc-32  linux-x86-32    solaris-sparc-64
    $ cd linux-x86-32/
    $ ls
    lib  sonar.sh  wrapper
    

    就我个人而言,我不在乎在单个归档文件中包含特定于平台的启动文件版本, 黄金对比 :我不需要查找和下载“正确”的档案,我可以在几个平台上解包,等等。

    当然,只有当二进制文件本身不是特定于平台时,上述所有内容才适用。如果它们真的是这样,那么使用特定于平台的程序集描述符,可能就需要依赖项的概要文件以及为每个平台运行构建了。