+1 for the Maven Hybrid solution

(CoC, Ease of use [something I miss when I work with other languages], solving 
occurring problems)

Sebastian

> Am 27.05.2019 um 14:41 schrieb Christofer Dutz <christofer.d...@c-ware.de>:
> 
> Hi all,
> 
> as the discussion had come up multiple times now … mainly on Slack, I would 
> like to do a dedicated discussion here on the list about the topic.
> 
> Up to now we had built the build to generally build every module with maven, 
> utilizing plugins to enable triggering builds with things like CMake.
> The maven build then took care of packing the results and handling the 
> dependencies (At least this was how I built things for the C++ module)
> With the plc4net however we’re using an execution of “dotnet” to build a 
> solution.
> In this case the build is entirely handled by dotnet and all maven does is 
> trigger the build and fail if the execution fails with any non 0 return code.
> We are currently doing something similar with python: where we’re just 
> calling python to execute the setup.py script.
> 
> What is your opinion on how we should do our builds?
> If we go down the path like I initially setup C++, we have the benefit of 
> utilizing the maven ecosystem and we will not have any problems during 
> releases.
> It however comes with some comfort disadvantages for the “native” guys. But 
> things like code-generation will work nicely.
> 
> If we go down a non-maven path we will have to deal with all of this 
> ourselves … we will have to come up with a way to handle everything ourselves
> Or learn how to do it in python and CMake and dotnet, and … The other thing 
> is that we can’t integrate the driver generation as easy as with maven.
> Either we manually execute the code generation multiple times with maven to 
> generate multiple output directories before executing the individual build 
> system
> Or we have to build custom generators for every build-system we are using.
> 
> Even if I like the way I setup the C++ build, I doubt all people will like it 
> as it requires them to do things differently than they are used to.
> But I would strongly object implementing multiple code-generators.
> 
> One option would be to split up the plc4x git repo into multiple repos – each 
> one for one language … so we’d have a plc4j, plc4cpp, plc4net and plc4python.
> Each of these would be dedicated to one particular language and have build 
> tools that fit them. However I strongly object this option, as it would 
> require the
> Release manager to understand and setup each of these environments.
> 
> Another option which I think would be a valid compromise, would be to have 
> all languages in one repo the way we currently have it and Maven as 
> triggering build system.
> The code is generated by maven but the build itself is handled by the 
> particular build system.
> This will require people working exclusively in VisualStudio or some Python 
> IDE, to manually run a “mvn generate-sources” first, but I think that’s a 
> reasonable restriction.
> 
> The benefit is that releasing this should be possible with our current 
> release process which has a limited setup cost for the Release Manager.
> 
> I would opt for the hybrid option with Maven as initiating build system for 
> releases and code generation and CI stuff but to have the native build system 
> for every language to build the individual parts.
> Namely this would be:
> 
>  *   Plc4cpp: CMake
>  *   Plc4net: dotnet
>  *   Plc4Python: python setup.py
> 
> Not quite sure how we can get the test-results to be reported correctly.
> 
> What are your thoughts on this?
> 
> Chris
> 
> 

Reply via email to