Maven 2 Maven:如何管理特定于平台的文件,如startscripts(不是库)
我有一个由三个模块组成的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都结束了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脚本 管理这些文件的最佳方法是什么,因为它们不需要像本机库那样进行任何编译 目前,我将每
是否有聪明的理由将这些启动文件移动到专用模块中,并对其进行管理,以便能够构建特定于平台的程序集,仅包括给定平台的启动文件?您可以使用配置文件激活和操作系统检测:
<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架构检测的帮助下,在下载时,我可以很肯定地展示当前的文件。当然,对于技术产品,我会遵循你的建议。谢谢@塞曼:嗯,我认为挑战一下你的想法会很有趣,所以我就这么做了:但我现在更了解你的用例,你的观点是正确的。祝你好运