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

Maven 2 Maven:如何管理特定于平台的文件,如startscripts(不是库),maven-2,Maven 2,我有一个由三个模块组成的java项目 公共项目 项目a b项目 项目a和b使用-通用作为依赖项 我使用一个简单的程序集配置将project-a、project-b和所有依赖的spring库等放在一个归档文件中 我还想为不同的平台windows32、windows64、linux32、linux64和macosx提供startscripts。 例如,我将使用windows winrun4j和用于linux的sh脚本 管理这些文件的最佳方法是什么,因为它们不需要像本机库那样进行任何编译 目前,我将每

我有一个由三个模块组成的java项目

公共项目 项目a b项目 项目a和b使用-通用作为依赖项

我使用一个简单的程序集配置将project-a、project-b和所有依赖的spring库等放在一个归档文件中

我还想为不同的平台windows32、windows64、linux32、linux64和macosx提供startscripts。 例如,我将使用windows winrun4j和用于linux的sh脚本

管理这些文件的最佳方法是什么,因为它们不需要像本机库那样进行任何编译

目前,我将每个项目的StartFile放在其/main/resources/bin文件夹中,结果生成了一个程序集,所有用于所有平台的startscripts都结束了


是否有聪明的理由将这些启动文件移动到专用模块中,并对其进行管理,以便能够构建特定于平台的程序集,仅包括给定平台的启动文件?

您可以使用配置文件激活和操作系统检测:

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

关于同一主题:


您可以使用配置文件激活和操作系统检测:

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

关于同一主题:

是否有聪明的理由将这些StartFile移动到专用模块中,并对其进行管理,以便能够构建特定于平台的程序集,仅包括给定平台的StartFile

如果只有启动脚本是特定于平台的,而不是代码,那么我就不会费心构建特定于平台的程序集,而是将它们捆绑在一起

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

这确实不是大多数项目正在做的,例如:

Tomcat简单案例 使用Tomcat,您可以在bin目录中同时获得脚本的.sh和.bat版本

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 就个人而言,我不在乎将特定平台版本的启动文件放在一个归档文件中,相反,我不需要找到并下载正确的归档文件,我可以在多个平台上解包,等等

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

是否有聪明的理由将这些StartFile移动到专用模块中,并对其进行管理,以便能够构建特定于平台的程序集,仅包括给定平台的StartFile

如果只有启动脚本是特定于平台的,而不是代码,那么我就不会费心构建特定于平台的程序集,而是将它们捆绑在一起

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

这确实不是大多数项目正在做的,例如:

Tomcat简单案例 使用Tomcat,您可以在bin目录中同时获得脚本的.sh和.bat版本

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 就个人而言,我不在乎将特定平台版本的启动文件放在一个归档文件中,相反,我不需要找到并下载正确的归档文件,我可以在多个平台上解包,等等


当然,只有当二进制文件本身不是特定于平台时,以上所有内容才适用。如果确实是这样的话,使用特定于平台的程序集描述符,可能需要为依赖项配置文件,并为每个平台运行构建。

是的,配置文件是您正在寻找的解决方案。谢谢科林坦克斯的这个想法。不,构建windows32不需要在windows32上运行,因为所有平台指定的文件都是静态的,不需要任何修改。对于执政官:*我为每个平台创建了配置文件。*将特定于平台的文件放入/src/main/resources/bin/*中,将my更改为排除/src/main/resources/bin/的所有子文件夹,并仅包括名称中包含当前概要文件的子文件夹。谢谢是的,profile是您正在寻找的解决方案。谢谢科林坦克斯的这个想法。不,构建windows32不需要在windows32上运行,因为所有平台指定的文件都是静态的,不需要任何修改。对于执政官:*我为每个平台创建了配置文件。*将特定于平台的文件放入/src/main/resources/bin/*中,将my更改为排除/src/main/resources/bin/的所有子文件夹,并仅包括名称中包含当前概要文件的子文件夹。谢谢我认为这种方法对于针对技术人员的发布是有效的。在bin文件夹中放置多个exe文件不是我想给客户的东西。在SourceForges架构检测的帮助下,在下载时,我很确定会呈现
当前文件。当然,对于技术产品,我会遵循你的建议。谢谢@塞曼:嗯,我认为挑战一下你的想法会很有趣,所以我就这么做了:但我现在更了解你的用例,你的观点是正确的。祝你好运。我认为这种方法对于针对技术人员的发布是有效的。在bin文件夹中放置多个exe文件不是我想给客户的东西。在SourceForges架构检测的帮助下,在下载时,我可以很肯定地展示当前的文件。当然,对于技术产品,我会遵循你的建议。谢谢@塞曼:嗯,我认为挑战一下你的想法会很有趣,所以我就这么做了:但我现在更了解你的用例,你的观点是正确的。祝你好运