0

I'm interested to know how software deployment for cross platforms as well as different programming languages happen.

Like,

  1. Customers is on - linux and Windows
  2. Languages - Java, .Net, Ruby and Python
  3. I wanted to understand how Ruby and Python projects/applications/modules are built and integrated with Java or .Net application and given as a single application to the customer.

I'm aware that, Java application can be built and deployed using Maven while .Net can be built using MSBuild and packaging can be done using Install shield. Will they go as independent artifacts to the customers or will they be integrated/merged to go as a single product. I really cant understand how it works.

Any real time example would be really helpful here.Kindly correct me if my understanding is incorrect.

  • have you looked at any IDL languages, like thrift, protocol buffers, etc? – esoterik Jun 26 '18 at 19:28
  • @esoterik : Sorry, no. – dev Jun 27 '18 at 7:52
1

General remark:

Software deployment is a huge area, and deployment of software that combines multiple technologies / frameworks has additional complexities - so there is no general answer. Still, I'll try to give some pointers as to what can be done.

  • There are various deployment technologies. They mostly fall in two groups:
    • some are part of a framework or language/runtime (such as Maven [see caveat below], JavaEE WARs or Web Deploy for Internet Information Server)
    • some are part of a platform/OS (such as Debian or RPM packages on Linux, or Windows Installer files (.msi) on Microsoft Windows)
  • Usually you choose a deployment approach from one of the two groups above - either you use the tech for the language/framework you use, or one for (each of) the target platform(s). For large projects, sometimes different compoments will use different technologies - for example the rich client may use a Windows Installer file, while the server is a Debian package.
  • If your whole project uses one language/framework, often using the matching deployment technology is the easiest solution. If you use multiple languages/frameworks, as in your example, you'll have to use a deployment tech for your platform - so if you want to deploy to multiple platforms, you'll have to use one tool per platform.

To address your points in detail:

I'm aware that, Java application can be built and deployed using Maven

Actually, not quite - while Maven does have a "deploy" step, in Maven "deploy" means copying an artifact to Maven's internal repository, while in general "deploy" means installing a finished application in a way that it can be used. While Maven does allow you to create ready-to-run (mostly) files, it is not a complete deployment technology.

while .Net can be built using MSBuild and packaging can be done using Install shield.

Yes, that would be an example of a platform-specific technology - in this case InstallShield, which is for Microsoft Windows.

Will they go as independent artifacts to the customers or will they be integrated/merged to go as a single product. I really cant understand how it works.

Again, this depends, but typically the various bits&pieces will be packaged as one installation file, to make deployment as simple as possible. Multiple components will usually be package separately (in particular, it usually does not make sense to package client and server together for a client/server system).

However, note that not everyone pays the same attention to a nice deployment experience. Some software, even expensive commercial systems, are notoriously difficult to install - for example Oracle databases and SAP are (used to be?) notorious for this.

  • Wow, that was very nicely put. Thanks a lot. +1. you meant to say every language needs its own build tool to build the source code but is it possible to apply different packages one top of another. say jar as the base and python on top of it as a single final package ? Kindly correct me if I'm wrong as I'm still exactly trying to comprehend the exact deployment process – dev Jun 26 '18 at 7:54
  • Yes, every language needs a specific build tool (though some part of that may be useable for multiple languages, such as CMake). The deployment tooling is usually separate - you take the result of the build process (such as an .exefile for .jar file), and wrap it into the file format(s) used by the deployment tool. – sleske Jun 26 '18 at 8:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.