OpenMake Meister – OpenMake Meister https://www.openmakesoftware.com/ Recent content on OpenMake Meister Hugo -- gohugo.io Blog: Software Build Automation Done Like Google Rock Stars https://www.openmakesoftware.com/blog/2021/09/27/software-build-automation-done-like-google-rock-stars/ Mon, 27 Sep 2021 00:00:00 +0000 https://www.openmakesoftware.com/blog/2021/09/27/software-build-automation-done-like-google-rock-stars/ <h2 id="software-build-automation-rock-stars-at-google">Software Build Automation Rock Stars at Google.</h2> <p>Build Automation is what OpenMake Software has survived on for the last 20 years.  It is core to your software development efforts regardless of what kind of development you do - agile or waterfall. Software build automation covers all aspects of compiling and linking your software application and making sure it can support continuous delivery - knowing the readiness of any software builds.</p> <div> <img src="https://www.openmakesoftware.com/images/jumpinjackflash.jpg" alt="Build Automation Rock Stars" /> </div> <h2 id="managing-dependencies">Managing Dependencies</h2> <p>Software Build Automation includes managing software dependencies, executing incremental builds, accelerating builds, exposing analytics, showing implosion and explosion reports and simplifying the entire soup to nuts process.  Most companies use scripts. We use standardize playbooks we call Build Services. These Build Services standardize how compilers are called creating builds that are reproducible.  Google has some tips as well that I thought was worth the time seeing.</p> <p>Watch this Google video from their education series.</p> <p><a href="https://www.youtube.com/watch?v=2qv3fcXW1mg">https://www.youtube.com/watch?v=2qv3fcXW1mg</a></p> <p>They have written a homegrown process that is extremely similar to Meister.  Build Rules, the elimination of scripts, incremental processing, management of libraries, parallelization  and distribution of workload is all shown. The good news is you do not need to write this process on your own. You can use Meister instead.  Meister solves all the problems and provides all the features covered here.   So yes, your builds can be intelligent too.</p> <p>And best yet, Meister is free for small teams and can be downloaded from <a href="https://github.com/OpenMake-Software/Meister/releases/">https://github.com/OpenMake-Software/Meister/releases/</a></p> Blog: Complex Compiler Plugins for OpenMake Meister https://www.openmakesoftware.com/blog/2021/06/30/complex-compiler-plugins-for-openmake-meister/ Wed, 30 Jun 2021 00:00:00 +0000 https://www.openmakesoftware.com/blog/2021/06/30/complex-compiler-plugins-for-openmake-meister/ <h2 id="compile-plugins-for-adobe-lawson-cognos-and-others">Compile Plugins for Adobe, Lawson, Cognos, and Others</h2> <p>Meister allows you to add 4GL and Mobile compile requirements to your build automation using plugins.</p> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 20px;"><strong>Description</strong></p></td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Lawson</h4></td><td>Compiles Lawson objects using the Lawson compiler in headless mode.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Adobe Flex</h4></td><td>Compiles Adobe Flex objects.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>PeopleSoft Cobol Native Runtime</h4></td><td>Creates MicroFocus COBOL generated native code (GNT) files from COBOL files. The target extension is '.gnt' and the source files are either .cbl or .cob. The flags chosen come from the pscbl.mak script that comes with PeopleSoft on UNIX.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>PowerGen</h4></td><td>Creates an executable from PowerBuilder project using PowerGen.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Actuate6</h4></td><td>Reports Actuate6 report compiler. Creates and .rox</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Cognos Powerhouse Compile Takes</h4></td><td>Cognos Powerhouse files (.qzs, .qks, .qts) and passes them to their respective compilers. &nbsp;Then it prints both the input passed to the compilers and the output of each of the compilers to a .cognos_log file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix 4ge Executable .4ge</h4></td><td>Creates an executable target from Informix and c code using the c4gl compiler. It is broken into two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and .a archive libraries to create the Final Target executable.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix Archive Library</h4></td><td>Compiles source code with the c4gl compiler and bundles the objects into an archive library using the GNU ar program.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix 4ge Executable</h4></td><td>.4ge Creates an executable target from Informix and c code using the c4gl compiler. It is broken into two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and .a archive libraries to create the Final Target executable.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix Form Compiler .frm</h4></td><td>Creates an Informix form target from .per files using the form4gl compiler. There is only one task which compiles .per files into .frm files.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix noext Executable .noext</h4></td><td>&nbsp;Creates an executable target from Informix and C code using the c4gl compiler. It is broken into two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and .a archive libraries to create the Final Target executable.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix Object</h4></td><td>Creates an object target from Informix or C code using the c4gl compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Informix Shared Library. .so</h4></td><td>&nbsp;Creates a standard shared library using the gcc program.</td></tr></tbody></table> <h2 id="support-database-management-in-your-software-compiles">Support Database Management in Your Software Compiles</h2> <p><a href="https://www.openmakesoftware.com/meister-build-automation/">Meister</a> enhances build automation by allowing you to incorporate database updates in your compile logic. The following Plugins can be purchased to extend your library of reusable Build Tasks.</p> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 20px;"><strong>Description</strong></p></td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle Cobol Exe</h4></td><td>Creates a standard executable linked statically and dynamically with Oracle libraries. &nbsp;For pre-compiling, it calls the Oracle proc program. &nbsp;For C and C++, it executes the xlc compiler. &nbsp;For COBOL programs, it uses the Microfocus COBOL compiler, cob. &nbsp;For creating the executable, it uses the Microfocus COBOL compiler, cob, to link.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle Exe</h4></td><td>Creates a standard executable. For pre-compiling, it calls the Oracle Pre-Compiler. &nbsp;For C and C++, it executes the cc compiler. &nbsp;For creating the executable, it uses oraxlc to compile and link.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle Forms</h4></td><td>The Oracle forms compiler, ifcmp60 on Windows and f60gen for other OS's, is used to create form objects from .fmb files.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle Form Library</h4></td><td>The Oracle forms compiler, ifcmp60 on Windows and f60gen for other OS's, is used to create form libraries (.plx) from .pll files.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle PSQL</h4></td><td>Compiles PL/SQL into an Oracle database. &nbsp;A file with .sqo extension is created to represent a successfully compiled object on the file system. &nbsp;The timestamp of the dependency .sql files will be checked against the .sqo file for incremental builds. &nbsp;If the .sql file is later than the .sqo, then it will be recompiled and a new.sqo file created. sqlplus is used to compile the code.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle Report</h4></td><td>Uses the Oracle Reports compiler, rwcon60, to create .rep reports. &nbsp;.rdf files may also be created.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle TDF</h4></td><td>Uses the Oracle Reports compiler, rwcon60, to create TDF reports. &nbsp;.rdf and .rex files may also be created.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Oracle Request Router</h4></td><td>An example of a customized Oracle C and C++ executable. &nbsp;It uses xlc/xlC to compile source code and ld to link the objects into an executable.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Sybase ASE 12.5 and Greater</h4></td><td>Used to create Sybase Adaptive Server database objects. &nbsp;It uses files to represent compiled objects and uses the isql program for compiling DDL, SQL and T/SQL. &nbsp;It uses the bcp command to import and export data. Designed for use with ASE 12.5 and greater. &nbsp;Beginning in ASE 12.5, ALTER statements can be bundled in a single transaction. You must have the "use ddl in tran" option set to true. &nbsp;To set this, issue the following commands at the Sybase command line: use db_name go sp_dboption db, "use ddl in tran", true go Start by create a final target file name with '.complete' extension. The name can be anything and can be related to a change request, e.g. SCR0345.complete This file will be created only after all the operations have completed successfully. Then add individual file dependencies broken down into single files as dependencies in the different option groups. Note that different types of DDL statements must have different file extensions according to the rules.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Sybase ASE pre-12.5</h4></td><td>Used to create Sybase Adaptive Server database objects. &nbsp;It uses files to represent compiled objects and uses the isql program for compiling DDL, SQL and T/SQL. &nbsp;It uses the bcp command to import and export data. Designed for use with ASE prior to release 12.5 because of the inability to bundle multiple ALTER statements into a single transaction. You must have the "use ddl in tran" option set to true. &nbsp;To set this, issue the following commands at the Sybase command line: use db_name go sp_dboption db, "use ddl in tran", true go Start by create a final target file name with '.complete' extension. The name can be anything and can be related to a change request, e.g. SCR0345.complete This file will be created only after all the operations have completed successfully. Then add individual file dependencies broken down into single files as dependencies in the different option groups. Note that different types of DDL statements must have different file extensions according to the rules.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>DB2 Exe</h4></td><td>Creates a standard executable by using DB2 Prep to pre-compile the .SQC file. &nbsp;Uses cc to compile the C programs. &nbsp;Uses xlc for linking.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>DB2 shared library</h4></td><td>Creates a standard shared library by using DB2 Prep to pre-compile the .SQC file. &nbsp;Uses cc to compile the C programs. &nbsp;Uses xlc for linking.</td></tr></tbody></table> <h2 id="linux-and-unixcompile-plugins-for-complex-builds">Linux and UNIX Compile Plugins for Complex Builds</h2> <p>Meister&rsquo;s Extended Plugins for Linux and UNIX compile needs support complex compilation tasks and includes your dependency management and acceleration. The following Plugins can be purchased to extend your library of reusable Linux and Unix Compile Plugins.</p> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 20px;"><strong>Description</strong></p></td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>AcuCobol 32 Executable</h4></td><td>Creates a standard executable using the AcuCOBOL CCBL or CCBL32 compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Archive Library</h4></td><td>An archive library is created by compiling source code into object files and the bundling the object files with the ar program.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Microfocus Cobol Executable</h4></td><td>Creates a standard executable. For C and C++, it executes the xlc compiler. &nbsp;For COBOL programs, it uses the Microfocus COBOL compiler, cob. &nbsp;For creating the executable, is uses the Microfocus COBOL compiler, cob, for linking.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>COBOL Native Runtime</h4></td><td>This creates MicroFocus COBOL generated native code (GNT) files from COBOL files. The target extension is '.gnt' and the source files are either .cbl or .cob. The key flag is the '-u' flag which tells the compiler to create a GNT file instead of a native operating system object file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>GNU Archive Library</h4></td><td>Compiles source code with the gcc compiler and bundles the objects into an archive library using the GNU ar program.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;GNU CPP Executable</h4></td><td>Creates an executable target from .c code using the gcc compiler. It is broken into two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and libraries to create the Final Target executable.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>GNU Executable</h4></td><td>Creates an executable target from .c code using the gcc compiler. It is broken into two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and libraries to create the Final Target executable.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;GNU LD Shared Library</h4></td><td>Creates a standard shared library using the gcc or g++ programs to compile C and C++ code and then using the AIX ld program to link the objects into a dynamic library.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;GNU Oracle ProC Executable</h4></td><td>This creates an executable from source code by compiling the C code and linking to Oracle libraries.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>GNU PIC Archive Library</h4></td><td>This creates a GNU archive library from source code by compiling the C/C++ code with the Position Independent Code option of the gcc compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>GNU PIC Executable</h4></td><td>This creates an executable from source code by compiling the C code with the Position Independent Code option of the gcc program.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;GNU PIC Oracle Executable</h4></td><td>This creates an executable from source code by compiling the C code with the Position Independent Code option for gcc and linking to Oracle libraries using gcc.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;GNU Shared Library</h4></td><td>Creates a standard shared library using the gcc program.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>ITHISAM</h4></td><td>Creates C header files from .DDL using the ITHISAM compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>LD Shared Library</h4></td><td>This shared library explicitly uses ld in the Link Build Task. &nbsp;The shared library is created by using the ar command to format the final object. &nbsp;cc is used to compile the source code.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>LD Shared Object</h4></td><td>This shared library explicitly uses ld in the Link Build Task. &nbsp;The shared library is created WITHOUT using the ar command to format the final object. &nbsp;cc is used to compile the source code.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Lex and Flex C File</h4></td><td>Used to generate a C source file from a lex source file when the C file needs to have a different name from the Lex file. There is also a Build Task under Available Tasks with the same rule that can be imported into any build service that compiles C code.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Lex C Header File</h4></td><td>Used to generate a C source header file from a lex source file when the C file needs to have a different name from the Lex file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Age C Project Archive Library</h4></td><td>Creates an archive library from the .icc project file. &nbsp;The .icc files is scanned to see if any source code has changed compared to the executable being created.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Visual Age C Project Executable</h4></td><td>Creates an executable target from the .icc project file. &nbsp;The .icc files is scanned to see if any source code has changed compared to the executable being created.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;PIC Archive Library</h4></td><td>This creates a GNU archive library from source code by compiling the C/C++ code with the Position Independent Code option of the gcc compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;PIC Executable</h4></td><td>This creates an executable from source code by compiling the C code with the Position Independent Code option of the gcc program.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;PIC Oracle Executable</h4></td><td>This creates an executable from source code by compiling the C code with the Position Independent Code option for gcc and linking to Oracle libraries using gcc.</td></tr></tbody></table> <h2 id="compile-plugins-to-supportcomplex-microsoft-builds">Compile Plugins to Support Complex Microsoft Builds</h2> <p>Meister supports complex .Net and Windows compiles with extended Microsoft compile plugins. The following Plugins can be purchased to extend your library of reusable Windows Build Tasks.</p> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 20px;"><strong>Description</strong></p></td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>.NET 2005 Dynamic Link Library</h4></td><td>Serialization Creates a Serialize .NET DLL using sgen utility</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>.NET 2005 Solution Dynamic Link Library</h4></td><td>Creates a .NET DLL using a .NET Solution file as a dependency. The DLL can be VB, C#, or C++. Built against the .NET 2.0 Framework</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;&nbsp;.NET 2005 Solution Executable</h4></td><td>Creates a .NET EXE using a .NET Solution file as a dependency. The EXE can be VB, C#, or C++. Built against the .NET 2.0 Framework</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;&nbsp;.NET C-Sharp Dynamic Link Library</h4></td><td>Creates a DLL using the Microsoft .NET C# compiler. &nbsp;The dependency should be the .NET Project file (.csproj). Must run bldmake with -s to preserve case sensitivity</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>.NET C-Sharp Executable</h4></td><td>Creates a command line executable using the Microsoft .NET C# compiler. The dependency should be the .NET Project file (.csproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET C-Sharp Module</h4></td><td>Creates a C# Module using the Microsoft .NET C# compiler. The dependency should be the .NET Project file (.csproj).</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET ISAPI Extended Dll Shared</h4></td><td>Creates a Microsoft .NET Internet Server Extension (ISAPI) or Filter DLL by using the Microsoft .NET C/C++ Compiler. Does not link the Microsoft .NET runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET ISAPI Extended Dll Static</h4></td><td>Creates a Microsoft .NET Internet Server Extension (ISAPI) or Filter DLL by using the Microsoft .NET C/C++ Compiler. &nbsp;Links the Microsoft .NET runtime libraries into the executable. &nbsp;Does not require that the runtime libraries be distributed. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET Managed CPP Class Library</h4></td><td>Creates a Microsoft .NET DLL using Microsoft .NET C/C++ compiler. &nbsp;The C/C++ code is .NET managed code. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET MFC ActiveX Control Shared Creates</h4></td><td>ActiveX control by using the Microsoft .NET C/C++ Compiler. Does not link the Microsoft .NET runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET MFC ActiveX Control Static</h4></td><td>Creates a ActiveX control by using the Microsoft .NET C/C++ Compiler. Links the Microsoft .NET runtime libraries into the executables. Does not require that the Microsoft .NET runtime libraries be distributed. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET MFC Dll Shared</h4></td><td>Creates a Microsoft .NET DLL with extended features by using the Microsoft .NET C/C++ compiler. An extension DLL allows you to derive custom classes from MFC and lend this "extended" version of MFC to applications that call your DLL. Extension DLLs can be used for passing MFC-derived objects between the application and the DLL. Does not link the Microsoft .NET runtime libraries into the DLL. The runtime libraries must be distributed and loaded dynamically. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>.NET MFC Dll Static</h4></td><td>Creates a standard Microsoft .NET executable by using the Microsoft .NET C/C++ Compiler and the Microsoft Foundation Class Libraries. Links the Microsoft .NET runtime libraries into the DLL. &nbsp;Does not require that the Microsoft runtime libraries be distributed. The dependency should be the .NET Project file (.vcproj .vcxproj). &nbsp;Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>.NET MFC Exe Shared</h4></td><td>Creates a standard Microsoft .NET executable by using the Microsoft .NET C/C++ Compiler and the Microsoft Foundation Class Libraries. Does not link the Microsoft .NET runtime libraries into the executables. The runtime libraries must be loaded dynamically. The dependency should be the .NET Project file (.vcproj .vcxproj). &nbsp;Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>.NET MFC Exe Static</h4></td><td>Creates a standard Microsoft .NET executable by using the Microsoft .NET C/C++ Compiler and the Microsoft Foundation Class Libraries. Links the Microsoft .NET runtime libraries into the EXE. &nbsp;Does not require that the Microsoft runtime libraries be distributed. The dependency should be the .NET Project file (.vcproj .vcxproj). &nbsp;Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET Solution Installer</h4></td><td>Creates a MSI file using a .NET Solution file as a dependency.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET Visual Basic Dll</h4></td><td>Creates a standard Visual Basic .NET dynamic link library. The dependency should be the .NET Project file (.vbproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET Visual Basic Exe</h4></td><td>Creates a standard Visual Basic executable. The dependency should be the .NET Project file (.vbproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET Win32 Console Shared</h4></td><td>Creates a command line program using the Microsoft .NET C/C++ compiler. &nbsp;Does not link the Microsoft &nbsp;.NET runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;.NET Win32 Console Static</h4></td><td>Creates a command line program using the Microsoft .NET C/C++ comiler. &nbsp;Links the Microsoft .NET runtime libraries into the executable. Does not require that the runtime libraries be distributed. The dependency should be the .NET Project file (.vcproj .vcxproj). Must run bldmake with -s to preserve case sensitivity.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;MFC AppWizard Dll Shared</h4></td><td>Creates a standard Microsoft DL by using the Microsoft Foundation Class Libraries.Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MFC AppWizard Dll Static</h4></td><td>Creates a standard Microsoft DLL by using the Microsoft Foundation Class Libraries. Links the Microsoft runtime libraries into the DLL. &nbsp;Does not require the Microsoft runtime libraries be distributed</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;MFC AppWizard Exe Shared</h4></td><td>Creates a standard Microsoft executable by using the Microsoft Foundation Class Libraries. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;MFC AppWizard Exe Static</h4></td><td>Creates a standard Microsoft executable by using the Microsoft Foundation Class Libraries. Links the Microsoft runtime libraries into the EXE. &nbsp;Does not require that the Microsoft runtime libraries be distributed.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;MFC AppWizard Extended Dll Shared</h4></td><td>Creates a Microsoft DLL with extended features. An extension DLL allows you to derive custom classes from MFC and lend this "extended" version of MFC to applications that call your DLL. Extension DLLs can be used for passing MFC-derived objects between the application and the DLL. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;MFC AppWizard Ocx Shared</h4></td><td>Creates a Microsoft ActiveX module. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;MFC AppWizard Ocx Static</h4></td><td>Create a Microsoft ActiveX module. &nbsp; Links the Microsoft runtime libraries into the executable. Does not require that the runtime libraries be distributed.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Application Shared</h4></td><td>Creates a standard Microsoft Executable. &nbsp;Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Application Shared NoPCH</h4></td><td>Creates a standard Microsoft Executable. Does not use precompiled header files. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Application Static</h4></td><td>Creates a standard Microsoft Executable. &nbsp;Links the Microsoft runtime libraries into the executable. Does not require that the runtime libraries be distributed.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC ATL COM AppWizard Dll</h4></td><td>Creates a Microsoft ATL COM interface DLL. &nbsp;Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC COM Dll Shared</h4></td><td>Creates a Microsoft COM interface DLL. &nbsp;Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC COM Dll Static</h4></td><td>Creates a Microsoft COM Interface DLL. Does not require that the runtime libraries be distributed.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Console Static</h4></td><td>MSVC Console Static Creates a command line executable. Links the Microsoft runtime libraries into the executable. Does not require that the runtime libraries be distributed.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Dynamic Link Lib Shared</h4></td><td>Creates a standard Microsoft DLL. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Dynamic Link Lib Shared NoPCH</h4></td><td>Creates a standard Microsoft DLL. &nbsp;Does not use precompiled header files. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Dynamic Link Lib Static</h4></td><td>Creates a standard Microsoft DLL. Links the Microsoft runtime libraries into the executable. Does not require that the runtime libraries be distributed.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Static Library</h4></td><td>Creates a Library that contains object files.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MSVC Threaded Console Shared</h4></td><td>Creates a command line program that uses threads. Does not link the Microsoft runtime libraries into the executables. The runtime libraries must be distributed and loaded dynamically</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>TypeLib</h4></td><td>Creates a type library that is used to update the Windows Registry.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VisualBasic</h4></td><td>Creates a standard Visual Basic executable. Note: When using the OM -a flag, which forces the rebuild of a VisualBasic executable, the VisualBasic project must allow Binary Compatible compiles. Otherwise a Binary Compatible error will occur.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Basic 7 Dll</h4></td><td>Creates a standard Visual Basic 7 dynamic link library. Note: When using the OM -a flag, which forces the rebuild of a VisualBasic executable, the VisualBasic project must allow Binary Compatible compiles. Otherwise a Binary Compatible error will occur.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Basic 7 Exe</h4></td><td>Creates a standard Visual Basic 7 executable. Note: When using the OM -a flag, which forces the rebuild of a VisualBasic executable, the VisualBasic project must allow Binary Compatible compiles. Otherwise a Binary Compatible error will occur.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VisualBasic DLL</h4></td><td>Creates a standard Visual Basic dynamic link library. Note: When using the OM -a flag, which forces the rebuild of a VisualBasic executable, the VisualBasic project must allow Binary Compatible compiles. Otherwise a Binary Compatible error will occur.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VisualBasic OCX</h4></td><td>Creates a Visual Basic OCX control. Note: When using the OM -a flag, which forces the rebuild of a VisualBasic executable, the VisualBasic project must allow Binary Compatible compiles. Otherwise a Binary Compatible error will occur.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Basic VBC Console Exe</h4></td><td>Compiles Visual Basic with the .NET Framework SDK compiler vbc.exe. &nbsp;It is used for target type 'exe'. It requires that files be listed as dependencies in the target definition file. To compile Visual Basic using a .vbp, .vbproj or a .sln file as a dependency, use the other Visual Basic Plugins.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Basic VBC Library</h4></td><td>Compiles Visual Basic with the .NET Framework SDK compiler vbc.exe. &nbsp;It is used for target type 'winexe'. It requires that files be listed as dependencies in the target definition file. To compile Visual Basic using a .vbp, .vbproj or a .sln file as a dependency, use the other Visual Basic Plugins.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Basic VBC Module</h4></td><td>Compiles Visual Basic with the .NET Framework SDK compiler vbc.exe. It is used for target type 'winexe'. It requires that files be listed as dependencies in the target definition file. To compile Visual Basic using a .vbp, .vbproj or a .sln file as a dependency, use the other Visual Basic Plugins.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Visual Basic VBC Windows Exe</h4></td><td>Compiles Visual Basic with the .NET Framework SDK compiler vbc.exe. &nbsp;It is used for target type 'winexe'. It requires that files be listed as dependencies in the target definition file. To compile Visual Basic using a .vbp, .vbproj or a .sln file as a dependency, use the other Visual Basic Plugins.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VisualBasic VBG</h4></td><td>Creates a standard Visual Basic executable. Note: When using the OM -a flag, which forces the rebuild of a VisualBasic executable, the VisualBasic project must allow Binary Compatible compiles. Otherwise a Binary Compatible error will occur.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VS Devenv 2005 Solution Dynamic Link Library</h4></td><td>Creates a .NET DLL using a .NET Solution file as a dependency. The DLL can be VB, C#, or C++. Built against the .NET 2.0 Framework</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VS Devenv 2005 Solution Executable</h4></td><td>Creates a .NET EXE using a .NET Solution file as a dependency. The EXE can be VB, C#, or C++. Built against the .NET 2.0 Framework</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>VS Devenv 2005 Solution Installer</h4></td><td>Creates a MSI file using a .NET Solution file as a dependency.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland BCC32 Dynamic Link Library</h4></td><td>Uses ilink32 linker to combine object modules (.OBJ files), library modules (.LIB files), and resources to produce executables (.EXE, .DLL, and .BPL files).</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland BCC32 Executable</h4></td><td>Creates a standard executable by using bcc32 to compile and link C and C++ programs. &nbsp;bcc32 defaults to calling ilink32 and processing the link automatically.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland Delphi Console Executable</h4></td><td>Creates a command line executable using the Borland Delphi Compiler. &nbsp;Only the Delphi Project File (.dpr) needs to be listed as a dependency.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland Delphi Console Executable</h4></td><td>Creates a command line executable using the Borland Delphi Compiler. &nbsp;Only the Delphi Project File (.dpr) needs to be listed as a dependency.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland Delphi DLL</h4></td><td>Creates a Dynamic Link Library (DLL) using the Borland Delphi Compiler. &nbsp;Only the Delphi Project File (.dpr) needs to be listed as a dependency.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland Delphi GUI Executable</h4></td><td>Creates a Windows GUI executable using the Borland Delphi Compiler. &nbsp;Only the Delphi Project File (.dpr) needs to be listed as a dependency.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Borland Delphi Package</h4></td><td>Creates a Borland .bpk.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Microfocus Cobol Executable</h4></td><td>Creates a standard executable using the Microfocus COBOL compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Microfocus NetExpress Cbllink</h4></td><td>Invokes the cbllink Compiler that compiles and links source .cbl cobol files.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Microfocus NetExpress Cbllink</h4></td><td>Invokes the cbllink Compiler that compiles and links source .cbl cobol files.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Microfocus NetExpress Compile</h4></td><td>Calls the cobol, cblnames and link executables to generate final target dll's and exe's. All dependencies are chained together so that the ouput of one step will automatically be included in the next, with the exception of the cblnames ouput file "cblds.obj." As a result, "cblds.obj" needs to be added as an explicit dependency to the Link task.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Microfocus NetExpress</h4></td><td>Creates a&nbsp;Graphical Executable</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Microfocus NetExpress</h4></td><td>Creates a&nbsp;Graphical SQL Executable</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>AcuCobol 32 Executable</h4></td><td>Creates a standard executable using the AcuCOBOL CCBL or CCBL32 compiler.</td></tr></tbody></table> <h2 id="compile-plugins-for-complex-java-builds">Compile Plugins for Complex Java Builds</h2> <p>The following Plugins can be purchased to extend your library of reusable Java Build Tasks. These Plugins are used to compile more complex Java artifacts and gives you the added benefit of dependency management and acceleration of the build.</p> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 20px;"><strong>Description</strong></p></td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Combine ClassPath</h4></td><td>Builds a .classpath file. It uses the Set Classpath to resolve all classpath files. The result can then be included in a different build targets.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Copy</h4></td><td>Copies dependencies to location(s) defined using the "todir=" parameter available in the pre-defined options. &nbsp;Multiple Option Groups may also be defined for groups of dependencies that need to copy to other "todir=" locations. &nbsp;The Target created in the build directory is a .copy text file containing log information.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Ear as Jar</h4></td><td>The Java Ear as Jar builds a .jar file using the .ear format. It uses the Set Classpath, Ant Javac and Ant Ear Build Tasks to compile and package up all of the dependencies that need to be included in the final target .ear file. Note that there may be no dependencies in the "Set Classpath" and "Ant Javac" Build Tasks if there is no .java source to compile for the .ear-like .jar file. All of the directory structure requirements of a .jar file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Ear&nbsp;no Compilation</h4></td><td>Builds an .ear file. It uses the Set Classpath, Ant Javac and Ant Ear Build Tasks to compile and package up all of the dependencies that need to be included in the final target .ear file. Note that there may be no dependencies in the "Set Classpath" and "Ant Javac" Build Tasks if there is no .java source to compile for the .ear file. All of the directory structure requirements of a .ear file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Jar no Compilation</h4></td><td>Builds a .jar file. It uses the Ant Jar Build Tasks to package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Jar Update</h4></td><td>Unjars jar dependencies and adds exploded files to target jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java JNI</h4></td><td>Converts a class file into a header file (.h) for the Java to Native interface. &nbsp;The dependency is the .class file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java JUnit Test</h4></td><td>Used to run JUnit tests. It runs JUnit tests specified in .java files in the Ant JUnit Test task against the classes and jars specified in the Set Classpath task. Each .java test file will create a corresponding output logfile using the formatter specified by the "type=" option. &nbsp;The JUnit Test task also creates as its target a .test logfile containing the output from Ant. By default the JUnit task runs with the options printsummary="withOutAndErr" and formatter type="xml".</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java RMIC Jar</h4></td><td>Incorporates a 4-step process to create a .jar file. The "Set Classpath" and "Ant Javac" Build Tasks define the classpath and compile javac files to class files as in other Plugins. &nbsp;The "Ant RMIC" Build Task takes as source the compiled classes from "Ant Javac" and generates other class files. The "Ant RMIC Jar" Build Task jars classes from both the "Ant Javac" and "Ant RMIC" Build Tasks.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Signed Jar</h4></td><td>Builds a .jar file. It uses the Set Classpath, Ant Javac and Ant Jar Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Tar</h4></td><td>Builds a .tar file. It uses the Ant Tar Build Task to package up all of the dependencies that need to be included in the final target .tar file</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java War as Jar</h4></td><td>Builds a .jar file in the format of a .war file. It uses the Set Classpath, Ant Javac and Ant War Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file. All of the directory structure requirements of a .war file are built into the Build Service final .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java War no Compilation</h4></td><td>Builds a .war file. It uses the Set Classpath, Ant Javac and Ant War Build Tasks to compile and package up all of the dependencies that need to be included in the final target .war file. All of the directory structure requirements of a .war file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java WBIMB BAR File</h4></td><td>Java Weblogic Ant wlappc Compile Prepares the compile by setting the Classpath. &nbsp;The Classpath should include the library containing the APPC compiler, most likely weblogic.jar. &nbsp;Uses Ant APPC Compile Task to compile APPC dependencies with the weblogic.appc compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic APPC Compile</h4></td><td>Prepares the compile by setting the Classpath. &nbsp;The Classpath should include the library containing the APPC compiler, most likely weblogic.jar. &nbsp;Uses Ant APPC Compile Task to compile APPC dependencies with the weblogic.appc compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic Clientgen Jar</h4></td><td>Uses the Weblogic clientgen task to create a client JAR file that contains a thin Java client used to invoke a Web Service. Takes an EAR file that contains the implementation of a WebLogic Web Service as a depencency.Java Weblogic EJB Compile Prepares the compile by setting the Classpath. &nbsp;The Classpath should include the library containing the EJB compiler, most likely weblogic.jar. &nbsp;Uses Ant EJB Compile Task to compile EJB dependencies with the weblogic.ejbc compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic EJB Compile and Jar</h4></td><td>Builds a .jar file. It uses the Set Classpath, Ant Javac and Ant Jar Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.Java Weblogic JSPC Compile Prepares the compile by setting the Classpath. &nbsp;The Classpath should include the library containing the JSP compiler, most likely weblogic.jar. &nbsp;Uses Ant JSP Compile Task to pre-compile JSP dependencies with the weblogic.jspc compiler.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>&nbsp;Java Weblogic Servicegen Ear</h4></td><td>Servicegen performs all Weblogic steps needed to assemble a Web Service. These steps include: - Creating the Web Service deployment descriptor (web-services.xml). - Introspecting EJBs and Java classes and generating any needed non-built-in data type supporting components. - Generating the client JAR file. - Packaging all the pieces into a deployable EAR file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic War</h4></td><td>Builds a .war file. It uses the Set Classpath, Ant Javac and Ant War Build Tasks to compile and package up all of the dependencies that need to be included in the final target .war file. All of the directory structure requirements of a .war file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic WLI Ear no Compile</h4></td><td>Builds an .ear file. It uses the Set Classpath, Ant Javac and Ant Ear Build Tasks to compile and package up all of the dependencies that need to be included in the final target .ear file. Note that there may be no dependencies in the "Set Classpath" and "Ant Javac" Build Tasks if there is no .java source to compile for the .ear file. All of the directory structure requirements of a .ear file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic WLI Jar</h4></td><td>.jar Final Results Extension: .jar Builds a .jar file. It uses the Set Classpath, Ant Javac and Ant Jar Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic WLI War</h4></td><td>Builds a .war file. It uses the Set Classpath, Precompile (xmlbean and apt tasks), Ant Javac and Ant War Build Tasks to compile and package up all of the dependencies that need to be included in the final target .war file. All of the directory structure requirements of a .war file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Weblogic XMLBeans Jar</h4></td><td>.jar Final Results Extension: .jar Builds a .jar file. It uses the Set Classpath, Ant Javac and Ant Jar Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java WebSphere 5.1 EJBDeploy EAR</h4></td><td>Use this build service when developing with IBM WebSphere Studio Application Developer 5.1 to generate deployment code and classes for an EAR. The dependency is the EAR built by the Openmake Eclipse Plugin-generated target files and the output file is the deployable EAR. The WAS_HOME environment variable MUST be set, e.g. WAS_HOME=C:\Progra~1\IBM\WSADv5.1 To build a deployable EAR for the MiniBank example, use the following values in the target definition: Final Target Name: MiniBankEAR.ear Final Target Output Path: deploy Dependency: MiniBankEAR.ear</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java WebSphere 5.1 WSEJBDeploy</h4></td><td>Use this build type when developing with IBM Websphere Application Developer 5.1 to generate deployment code and classes.The dependency is the JAR built by the Openmake Eclipse Plugin-generated target files and the output file is the deployable JAR. The WAS_HOME environment variable MUST be set, e.g. WAS_HOME=C:\bin\WebSphere\AppServer</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java WebSphere 6.0 EJBDeploy EAR</h4></td><td>Use this build service when developing with IBM Rational Application Developer 6.0 for WebSphere Software to generate deployment code and classes for an EAR. The dependency is the EAR built by the Openmake Eclipse Plugin-generated target files and the output file is the deployable EAR. The WAS_HOME environment variable MUST be set, e.g. WAS_HOME=C:\bin\WebSphere\AppServer To build a deployable EAR for the AutoWorld example, use the following values in the target definition: Final Target Name: autoworld.ear Final Target Output Path: deploy Dependency: AutoWorld20ExampleEAR.ear</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Websphere Application Client Jar</h4></td><td>Builds an .jar file. It uses the Set Classpath, Ant Javac and Ant Ear Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Websphere Ear</h4></td><td>Builds an .ear file. It uses the Set Classpath, Ant Javac and Ant Ear Build Tasks to compile and package up all of the dependencies that need to be included in the final target .ear file. Note that there may be no dependencies in the "Set Classpath" and "Ant Javac" Build Tasks if there is no .java source to compile for the .ear file. All of the directory structure requirements of a .ear file are built into the Build Service.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java WebSphere EJBDeploy Complete</h4></td><td>Builds a .jar file. It uses the Set Classpath, Ant Javac and Ant Jar Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java WPS Service Deploy</h4></td><td>Builds a .ear file. It uses the Ant Zip Build Tasks to package up all of the dependencies that need to be included in the final target .ear file and use servicedeploy to create the .ear.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Java Zip</h4></td><td>Builds a .zip file. It uses the Ant Zip Build Tasks to package up all of the dependencies that need to be included in the final target .zip file.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Manage Ear Deployment Descriptors</h4></td><td>Insert and replace XML tags and values in deployment descriptors of an archive. It unjars the files to be updated from the archive, next it will insert and replace the XML tags and values and finally create a new jar with the updated files to the Target name.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Manage War Deployment Descriptors</h4></td><td>Insert and replace XML tags and values in deployment descriptors of an archive. &nbsp;It unjars the files to be updated from the archive, next it will insert and replace the XML tags and values and finally create a new jar with the updated files to the Target name.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>MD5 Checksum</h4></td><td>Creates a Target file with a .md5 extension that contains the MD5 checksum information of the dependent file. &nbsp;The checksum value is also outputted to the build log. This value is useful in determining if a Target built as expected.</td></tr><tr><td style="text-align: center; vertical-align: top;"><h4>Update Deployment Descriptors</h4></td><td>Insert and replace XML tags and values in deployment descriptors of an archive. It unjars the files to be updated from the archive, next it will insert and replace the XML tags and values and finally updated the original jar with the updated files.</td></tr></tbody></table> Blog: OpenMake Software Receives SD Times 100 Award https://www.openmakesoftware.com/blog/2020/06/22/openmake-software-receives-sd-times-100-award/ Mon, 22 Jun 2020 00:00:00 +0000 https://www.openmakesoftware.com/blog/2020/06/22/openmake-software-receives-sd-times-100-award/ <h2 style="text-align: center;">OpenMake Software Receives SD Times 100 Award OMS recognized by SD Times in the DevOps Leadership category for the fourth consecutive year.</h2> <div> <img src="https://www.openmakesoftware.com/images/SDTimes-2020.png" alt="SD Times 2020" width="147" height="154" /> </div> <br> <p><strong>Santa Fe</strong>–June 22, 2020– OpenMake Software announced today that they received the <a href="https://sdtimes.com/sd-times-june-2020/">SD Times 100 Award</a> for DevOps Leadership for the 4th year in a row.  OpenMake Software, the creators of OpenMake Meister for build and release management,  democratized continuous deployments with their contribution and support of the Oretlius <a href="https://www.ortelius.io/"> Open Source Project</a>. The award recognizes leaders and innovators of the software development industry for 2020.</p> <p>SD Times explains, &ldquo;When choosing the SD Times 100, we carefully considered each company’s offerings and reputation. We also listened for the “buzz”—how much attention and conversation we’ve heard around the company and its products and technologies—as a sign of leadership within the industry.&rdquo; Congratulations to all who won awards this year, the full list is available <a href="https://sdtimes.com/sd-times-100/sd-times-100-2020-tear-down-those-walls/">online.</a></p> <p>Receiving the award for the forth consecutive year is an important achievement for OpenMake Software as their stated goals is to be ‘disrupters’ in the Application Release Automation space. OpenMake Software, together with <a href="https://www.deployhub.com">DeployHub</a>, will release the latest open source <a href="https://www.ortelius.io">Ortelius</a> 9.0 Version in early July.</p> <p>&ldquo;We make configuring software builds and deployments easy,&rdquo; says Steve Taylor, Chief IT Architect of  OpenMake Software.  &ldquo;Access to automated build and deploy tooling is a barrier for development teams due in large part to the cost.  We are democratizing continuous deployments for all.  And the Ortelius Microservice Management open source project is leveraging our core configuration expertise designed for microservices. &quot;</p> <p><strong>SD Times</strong> launched in February 2000 by BZ Media, and is the newspaper of record for the software development industry. SD Times is published twice monthly in print and at <u><a href="https://sdtimes.com/"><a href="https://www.sdtimes.com">www.sdtimes.com</a></a>.</u></p> <p><strong>DeployHub</strong> is a central hub of microservice configuration metadata.  It tracks and versions the ‘death star’ thus simplifying the migration to – and ongoing management of – a microservice architecture. They understand the importance of supporting today’s cloud and physical data centers, but maintain a strong focus on the critical need for a microservices and <a href="https://kubernetes.io/">Kubernetes</a> platform.</p> Blog: SDTimes 100 Award goes to OpenMake Software in DevOps Category https://www.openmakesoftware.com/blog/2019/06/10/sdtimes-100-award-goes-to-openmake-software-in-devops-category/ Mon, 10 Jun 2019 00:00:00 +0000 https://www.openmakesoftware.com/blog/2019/06/10/sdtimes-100-award-goes-to-openmake-software-in-devops-category/ <h2 id="openmake-software-receives-sd-times-100-award-oms-recognized-by-sd-times-in-the-devops-leadership-category">OpenMake Software Receives SD Times 100 Award OMS recognized by SD Times in the DevOps Leadership category</h2> <p><img src="images/SDT100_logo_2019_600px-300x258.jpg" alt="SDTimes 100 2019"></p> <p>Santa Fe, NM–June 10, 2019– OpenMake Software, the company who started DeployHub for microservice configuration management, today announced receipt of the <a href="https://sdtimes.com/sdtimes-100/2019/best-in-show/devops-2019/">SD Times 100 Award</a> for excellence and leadership in the DevOps category. The award titled &ldquo;SD Times 100&rdquo; recognizes leaders and innovators of the software development industry for 2019 in 11 separate industry segments.</p> <p>This SD Times 100 award is an important achievement for OpenMake Software as their stated goal is to be a ‘disrupter’ in the DevOps space supporting continuous deployments for both monolithic and microservice releases. To this end, the co-founders created a new company, DeployHub Inc., with a laser focus around microservice tracking, sharing, versioning and deployments - critical pieces of the Kubernetes pipeline.  DeployHub is based on the open source project called Ortelius for microservice configuration mapping.</p> <p>&ldquo;Companies are building out Kubernetes pipelines that need features to manage microservices”, explained Tracy Ragan, CEO and Co-Founder of OMS and DeployHub.  “With DeployHub, we provide a central microservice sharing platform that tracks the configuration of microservices and maps the logical view of a monolithic application.  And yes, we can deploy an independent microservice fast and safely with versioning and history.”</p> <h3 id="about-sd-times">About SD Times</h3> <p>Launched in February 2000, BZ Media&rsquo;s SD Times is the newspaper of record for the software development industry. SD Times is published twice monthly in identical print and digital editions and can also be read online at <a href="https://sdtimes.com/">www.sdtimes.com</a>.</p> <h3 id="about-openmake-software">About OpenMake Software®</h3> <p>OpenMake® Software delivers highly reusable DevOps Solutions that allow our customers to master agile’s last mile. For more information on OpenMake Software, go to <a href="https://www.openmakesoftware.com">www.OpenMakeSoftware.com</a></p> <h3 id="about-deployhub">About DeployHub®</h3> <p>DeployHub is a central microservice sharing platform where developers catalog, publish, version and deploy their applications built on-top of Kubernetes. For more information go to <a href="https://www.deployhub.com/">DeployHub.com</a></p> Blog: OpenMake Software Spins Off New Company - DeployHub Inc. https://www.openmakesoftware.com/blog/2018/07/19/openmake-software-spins-off-new-company-deployhub-inc./ Thu, 19 Jul 2018 00:00:00 +0000 https://www.openmakesoftware.com/blog/2018/07/19/openmake-software-spins-off-new-company-deployhub-inc./ <h2 id="openmake-software-announces-the-spin-off-of-a-new-company-deployhub-inc-for-the-purpose-of-providing-open-source-application-release-automation-for-continuous-deployment">OpenMake Software announces the spin-off of a new company, DeployHub, Inc. for the purpose of providing Open Source Application Release Automation for Continuous Deployment</h2> <p><img src="images/DeployHub-Stacked-Final-Grey200.png" alt="">  </p> <p> </p> <p><strong>Santa FE, NM</strong> – July 19, 2018 – OpenMake® Software, visionaries in continuous build and continuous deployment, today announced that they have formed a new company, DeployHub Inc., that will serve to support the DeployHub Open Source Continuous Deployment project.</p> <p> </p> <p>&ldquo;DeployHub, Inc. has been formed by the co-founders of OpenMake Software for the sole purpose of providing freely available, full strength, continuous deployments to high performing agile teams.&rdquo; said Tracy Ragan, CEO of OpenMake Software. &ldquo;We recognize that the high cost of Application Release Automation is a barrier to agile teams wanting to adopt full stack continuous deployments.  DeployHub Open Source will break that barrier.&rdquo;</p> <p> </p> <p>DeployHub, Inc. will support the DeployHub Open Source community and provide an open source SaaS offering for a frictionless road to full continuous deployment. For more information, go to <a href="https://www.deployhub.com">www.deployhub.com</a>.</p> <p> </p> <p> </p> <h2 id="_about-deployhub-inc_"><strong><em>About DeployHub, Inc.</em></strong></h2> <p>DeployHub Inc. is driven by the goal to firmly establish continuous deployments as a reality for high performing agile teams, allowing them to rapidly and safely release new innovation to their software end users.  We understand the importance of supporting today’s cloud and physical data centers, but maintain a strong focus on the future needs of the new microservices and Kubernetes environments. More at <a href="https://www.deployhub.com/">DeployHub.com</a></p> <p>  </p> <h2 id="_about-openmake-software_"><strong><em>About OpenMake Software</em></strong></h2> <p>OpenMake® Software delivers highly reusable DevOps Solutions that allow our customers to master agile’s last mile. As a 100% self-funded organization, we have the freedom to focus on our customer’s needs, delivering innovation in continuous builds and continuous deployment. More Info at <a href="https://www.openmakesoftware.com">www.OpenMakeSoftware.com</a></p> <p> </p> <p>OpenMake Software is a registered trademark of Catalyst Systems Corporation. All other trademarks used in this document are the property of their respective owners.</p> <p> </p> <p>DeployHub is a registered trademark of DeployHub Inc. All other trademarks used in this document are the property of their respective owners.</p> <p> </p> <p> </p> <p> </p> <table><tbody><tr><td width="872">&nbsp;<div></div>DeployHub,Inc., 2232 Dell Range Blvd Suite 245-3467, Cheyenne, WY 82009 Mailing: P.O. Box 659, Cerrillos, NM 87010<div></div>&nbsp;<div></div>Twitter:&nbsp; @DeployHubProj<div></div>Facebook: /DeployHub<div></div>GitHub: https://groups.google.com/forum/#!forum/deployhub-project<div></div>&nbsp;</td></tr></tbody></table> Blog: OpenMake's CEO Recognized as WIT Honoree by NM Technology Counsil https://www.openmakesoftware.com/blog/2018/03/07/openmakes-ceo-recognized-as-wit-honoree-by-nm-technology-counsil/ Wed, 07 Mar 2018 00:00:00 +0000 https://www.openmakesoftware.com/blog/2018/03/07/openmakes-ceo-recognized-as-wit-honoree-by-nm-technology-counsil/ <h2 id="new-mexico-technology-council-recognizes-tracy-ragan-for-her-career-in-software-development">New Mexico Technology Council Recognizes Tracy Ragan for Her Career in Software Development</h2> <p><img src="images/TracyBlogPhoto-300x225.png" alt="">Santa FE, NM – March 7, 2018 – OpenMake® Software, visionaries in continuous build and continuous deployment, today announced that Tracy Ragan, OpenMake Software, CEO has been recognized as a New Mexico Women In Technology (WIT) Honoree by the <a href="https://nmtechcouncil.org/">New Mexico Technology Council</a>.</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/mMcRoXat_r8" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> <p>&ldquo;I’ve worked in what is now called Continuous Delivery since 1995. It is a pleasure to be recognized for my contribution in this particular technology by the New Mexico Technology Council&rdquo; said Tracy Ragan, CEO of OpenMake Software. &ldquo;Being part of a group of women is particularly important when the end game is to bring more young woman into STEM.&rdquo;</p> <p>“Tracy is among an amazing group of honorees this year. We are pleased to see more technology moving into New Mexico and particularly happy to see technology firms with women at the helm,” said Nadine Buerger, Investor and Program Manager for NM Technology Counsil, organizers of the NM WIT Annual Event.</p> <p><strong>About New Mexico Technology Council</strong> The New Mexico Technology council is focused on creating opportunities for tech based business in New Mexico supporting a forum for member companies to connect &amp; grow. The board is made up of individuals from a wide range of backgrounds with a common goal of economic development in STEM.</p> <p><strong>About OpenMake Software</strong> OpenMake® Software delivers highly reusable DevOps Solutions that allow our customers to master agile’s last mile. As a 100% self-funded organization, we have the freedom to focus on our customer’s needs, delivering innovation in continuous builds and continuous deployment.</p> Blog: OpenMake® Software Joins Cloud Native Computing Foundation https://www.openmakesoftware.com/blog/2018/01/18/openmake-software-joins-cloud-native-computing-foundation/ Thu, 18 Jan 2018 00:00:00 +0000 https://www.openmakesoftware.com/blog/2018/01/18/openmake-software-joins-cloud-native-computing-foundation/ <h2 id="openmake-software-focuses-on-kubernetes-and-cloud-native-computing">OpenMake Software focuses on Kubernetes® and Cloud Native Computing</h2> <p><img src="images/kubernetes-wheel-300x200.jpg" alt=""><strong>Santa FE, NM</strong> – January 18, 2018– OpenMake® Software, visionaries in continuous build and continuous deployment, today announced they have joined the Cloud Native Computing® (CNCF®) – which sustains and integrates open source technologies like Kubernetes® and Prometheus™ – as a Silver member.</p> <p>&ldquo;Innovation in Continuous Deployment as it relates to Kubernetes, microservices and the server-less data center will be critical for our customers.&rdquo; said Tracy Ragan, CEO of OpenMake Software. &ldquo;Being part of the CNCF will help us drive innovation in this area, allowing DeployHub to solve both the software release challenges of today, and be aligned with the community addressing challenges created by this new wave of digital transformation.&rdquo;</p> <p>“We’re thrilled to welcome OpenMake Software as a new member,” said Dan Kohn, Executive Director of the Cloud Native Computing Foundation. “The company’s experience in continuous build and delivery makes them a great addition to the CNCF community.”</p> <h2 id="_about-cloud-native-computing-foundation_"><strong><em>About Cloud Native Computing Foundation</em></strong></h2> <p>Cloud native computing uses an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization. The Cloud Native Computing Foundation (CNCF) hosts critical components of cloud native software stacks, including Kubernetes and Prometheus. CNCF serves as the neutral home for collaboration and brings together the industry’s top developers, end users and vendors – including the world’s largest public cloud and enterprise software companies as well as dozens of innovative startups. CNCF is part of The Linux Foundation, a nonprofit organization. For more information about CNCF, please visit <a href="https://www.cncf.io/">www.cncf.io</a>.</p> <p> </p> <h2 id="_about-openmake-software_"><strong><em>About OpenMake Software</em></strong></h2> <p>OpenMake® Software delivers highly reusable DevOps Solutions that allow our customers to master agile’s last mile. As a 100% self-funded organization, we have the freedom to focus on our customer’s needs, delivering innovation in continuous builds and continuous deployment. An investment in our DevOps solutions or Professional Services forms a ‘technical partnership’ that provides you expertise and support to solve your toughest build and release problems for today and tomorrow.</p> <p>More Info at <a href="https://www.openmakesoftware.com">www.OpenMakeSoftware.com</a></p> <p>OpenMake Software is a registered trademark of Catalyst Systems Corporation. All other trademarks used in this document are the property of their respective owners.</p> Blog: Common Meister Compiler Plugins https://www.openmakesoftware.com/blog/2017/06/30/common-meister-compiler-plugins/ Fri, 30 Jun 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/06/30/common-meister-compiler-plugins/ <h2 id="common-compile-plugins---covers-most-of-your-compile-needs">Common Compile Plugins - covers most of Your Compile Needs</h2> <p>Meister standardizes your software compiles using compiler plugins. The following plugins are included with Meister. If you are needing more complex plugins, such as database management or mobile development, check out our <a href="https://www.openmakesoftware.com/blog/2021/06/30/complex-compiler-plugins-for-openmake-meister/">advanced plugins</a>.</p> <h2 id="cc-compiler-plugins">C/C++ Compiler Plugins</h2> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 20px;"><strong>Description</strong></p></td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>CPP Executable</h3></td><td>Creates a standard executable by using xlC_r to compile and link C and C++ programs</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>CPP Shared Library</h3></td><td>Specific to C++ and the use of mangled class names. Creates a standard C++ shared library by using xlC_r to compile C and C++ programs. &nbsp; Uses makeC++SharedLib for Linking.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Entry Shared Library</h3></td><td>This shared library contains an entry point option for cc in the Link Build Task. &nbsp;The shared library is created by using the ar command to create the final object</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Entry Shared Object</h3></td><td>This shared library contains an entry point option for cc in the Link Build Task. &nbsp;The shared object is not formatted by ar.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>AIX Executable</h3></td><td>Creates an executable target from .c code using the default c compiler. It has two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and libraries to create the Final Target executable.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Yacc C File</h3></td><td>Used to generate a C source file from a yacc source file when the C file needs to have a different name from the yacc file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Yacc C Header File</h3></td><td>Used to generate a C source header file from a yacc source file when the C file needs to have a different name from the yacc file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr></tbody></table> <h2 id="java-compile-plugins">Java Compile Plugins</h2> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><p style="font-size: 20px;"><strong>Name</strong></p></td><td style="text-align: center;"><p style="font-size: 25px;"><strong>Description</strong></p></td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Ant Java Doc</h3></td><td>Used to create documentation using the Ant Javadoc task. &nbsp;It generates an index.hml file. &nbsp;This file's timestamp is compared against Java and Classpath dependencies' timestamps in incremental builds. Because a standard file name "index.hml" is used for all JavaDoc Targets, it is recommended that each Javadoc Target be created in a separate directory, e.g. javadoc1/index.html, javadoc2/index.html, etc.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Java Set Classpath</h3></td><td>.classpath Builds a .classpath file. It uses the Set Classpath to resolve all classpath files. The result can then be included in a different TGT.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;Java Jar</h3></td><td>Builds a .jar file. It uses the Set Classpath, Ant Javac and Ant Jar Build Tasks to compile and package up all of the dependencies that need to be included in the final target .jar file.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Java War</h3></td><td>Builds a .war file. It uses the Set Classpath, Ant Javac and Ant War Build Tasks to compile and package up all of the dependencies that need to be included in the final target .war file. All of the directory structure requirements of a .war file are built into the Build Service.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Java Ear</h3></td><td>&nbsp;Builds an .ear file. It uses the Set Classpath, Ant Javac and Ant Ear Build Tasks to compile and package up all of the dependencies that need to be included in the final target .ear file. Note that there may be no dependencies in the "Set Classpath" and "Ant Javac" Build Tasks if there is no .java source to compile for the .ear file. All of the directory structure requirements of a .ear file are built into the Build Service.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Java Javadoc</h3></td><td>Used to create documentation using the javadoc program. &nbsp;It generates an index.hml file. &nbsp;This file's timestamp is compared against Java and Classpath dependencies' timestamps in incremental builds. Because a standard file name "index.hml" is used for all JavaDoc Targets, it is recommended that each Javadoc Target be created in a separate directory, e.g. javadoc1/index.html, javadoc2/index.html, etc.Because of the wide variation in the use of the Javadoc command, customization of the JDK Javadoc Task may be required. There will be no need to modify the Java Javadoc Build Service The Target Name should be index.html or &lt;subdirectory&gt;/index.html. &nbsp;Typical Tasks would be 1. Set Classpath, 2. JavaDoc.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;Java Javadoc Jar</h3></td><td>Used to create documentation using the javadoc program. &nbsp;Generates an index.hml file. &nbsp;This file's timestamp is compared against Java and Classpath dependencies' timestamps in incremental builds. Because a standard file name "index.hml" is used for all JavaDoc Targets, it is recommended that each Javadoc Target be created in a separate directory, e.g. javadoc1/index.html, javadoc2/index.html, etc.Because of the wide variation in the use of the Javadoc command, customization of the JDK Javadoc Task may be required. There will be no need to modify the Java Javadoc Build Service The Target Name should be index.html or &lt;subdirectory&gt;/index.html. &nbsp;Typical Tasks would be 1. Set Classpath, 2. JavaDoc.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;Java Compile</h3></td><td>Uses the Ant "javac" task to compile Java code files. &nbsp;All dependencies added to this Build Task will be compiled using the compiler specified in the "compiler" Option parameter.</td></tr></tbody></table> <h2 id="microsoft-compiler-plugins"> Microsoft Compiler Plugins</h2> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><h2><em><strong>Name</strong></em></h2></td><td style="text-align: center;"><h2><em><strong>Description</strong></em></h2></td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;MSBuild Dynamic Link Library</h3></td><td>Creates a .NET EXE using a .NET Solution file as a dependency. The EXE can be &nbsp;VB, C#, or C++. Built against the .NET 2.0 Framework</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;MSBuild Executable</h3></td><td>Creates a .NET EXE using a .NET Solution file as a dependency. The EXE can be &nbsp;VB, C#, or C++. Built against the .NET 2.0 Framework</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;MSBuild Website</h3></td><td>Creates a final results extension: .webproject</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;.NET Solution Dynamic Link Library</h3></td><td>Creates a .NET DLL using a .NET Solution file as a dependency. &nbsp;The DLL can be VB, C#, or C++.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;.NET Solution Executable</h3></td><td>Creates a .NET EXE using a .NET Solution file as a dependency. &nbsp;The EXE can be &nbsp;VB, C#, or C++.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;&nbsp;Yacc C</h3></td><td>Used to generate a C source header file from a yacc source file when the C file needs to have a different name from the yacc file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>&nbsp;Yacc C Header File</h3></td><td>Used to generate a C source header file from a yacc source file when the C file needs to have a different name from the yacc file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Gnu Exe</h3></td><td>Creates a standard executable. It uses gcc to compile and link C and C++ programs.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Gnu DLL</h3></td><td>Creates a standard DLL. &nbsp;It uses the gcc to compile and link C and C++ programs.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Wise Installer</h3></td><td>Uses Wise Installer to create the disk images for the installer. &nbsp;The dependencies are .wsi, .dll and.exe files.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>InstallShield</h3></td><td>Uses Installshield to create the disk images for the Installer. &nbsp;The dependencies are the setup.rul, .ipr, .dll and .exe files.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Perl Script</h3></td><td>Will execute a set of Perl scripts listed as dependencies in the Target file. &nbsp;The order that the scripts will be executed is random. &nbsp;If a particular order is required, a "driver" Perl script should be used as the single dependency in the Target that includes the list of Perl script to execute in the correct execution order.</td></tr></tbody></table> <h2 id="unixlinux-plugins">UNIX/Linux Plugins</h2> <table class="buildservice" style="width: 100%;" border="1"><tbody><tr style="background-color: #82bbdc;"><td style="border-color: grey; width: 200px; vertical-align: top; text-align: center;"><h2><em><strong>Name</strong></em></h2></td><td style="text-align: center;"><h2><em><strong>Description</strong></em></h2></td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>CPP Executable</h3></td><td>Creates a standard executable by using xlC_r to compile and link C and C++ programs</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>CPP Shared Library</h3></td><td>Specific to C++ and the use of mangled class names. Creates a standard C++ shared library by using xlC_r to compile C and C++ programs. &nbsp; Uses makeC++SharedLib for Linking.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Entry Shared Library</h3></td><td>This shared library contains an entry point option for cc in the Link Build Task. &nbsp;The shared library is created by using the ar command to create the final object</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Entry Shared Object</h3></td><td>This shared library contains an entry point option for cc in the Link Build Task. &nbsp;The shared object is not formatted by ar.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>AIX Executable</h3></td><td>Creates an executable target from .c code using the default c compiler. It has two tasks; Compile and Link. The Compile Build Task converts source code to .o object files. The Link Task links .o object files and libraries to create the Final Target executable.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Yacc C File</h3></td><td>Used to generate a C source file from a yacc source file when the C file needs to have a different name from the yacc file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr><tr><td style="border-color: grey; width: 200px; text-align: center; vertical-align: top;"><h3>Yacc C Header File</h3></td><td>Used to generate a C source header file from a yacc source file when the C file needs to have a different name from the yacc file. There is also a Build Task under available tasks with the same rule that can be imported into any build service that compiles C code.</td></tr></tbody></table> Blog: OpenMake Meister Provides Cross Platform Benefits for z/OS Developers https://www.openmakesoftware.com/blog/2017/06/30/openmake-meister-provides-cross-platform-benefits-for-z/os-developers/ Fri, 30 Jun 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/06/30/openmake-meister-provides-cross-platform-benefits-for-z/os-developers/ <h2 id="openmake-meister-supports-zos-compiles-for-cross-platform-builds">OpenMake Meister Supports z/OS Compiles for Cross Platform Builds.</h2> <p>OpenMake Meister for z/OS is the only build automation solution available that allows you to build and manage binaries, across the enterprise - from Windows and Unix to the <a href="https://en.wikipedia.org/wiki/Mainframe_computer">mainframe</a>, providing a cross platform build solution. Meister for z/OS provides a central, common build management method for managing your binaries, regardless of the language or Operating System.</p> <p>So go ahead, develop on the mainframe. We have you covered.</p> <div> <img src="https://www.openmakesoftware.com/images/crossplatform-300x243.jpg" alt="cross platform builds" /> </div> <h3 id="key-benefits">Key Benefits:</h3> <p><strong>Build Management Best Practices</strong></p> <p>Meister for z/OS Build Services enable build management best practices by defining standard procedures for calling z/OS compilers.  Build Services are based on REXX and can be developed using the Meister for z/OS rich library of reusable REXX modules that perform common tasks such as generating JCL. Meister enable build best practices and enforces standard procedures in every build you execute.</p> <p><strong>Adaptable and Dynamic Builds</strong></p> <p>OpenMake Meister for z/OS is the perfect solution for developers writing applications that connect diverse platforms.  When your application spans both the legacy mainframe environment as well as the distributed environment, you need a method for building the application as if it runs on a single platform. Meister standardizes and centralizes the creation of binaries for both the mainframe and distributed platforms.</p> <p><strong>On-demand Build Knowledge</strong></p> <p>Meister for z/OS integrates into the Meister community-developed knowledge base, enabling cross-platform build coordination.  The community-developed knowledge base keeps all developers in sync providing a shared build object repository, common locations for reporting on parameter usage, and environment variable usage.  Build logs, reports and schedules are centralized, providing the self-service and self-documented build management support needed in today&rsquo;s lean development environments.</p> <p><strong>Managing Source to Load Parity</strong></p> <p>Meister for z/OS provides the deep dependency discovery needed for exposing the artifacts used to create your load objects.  Even when components are not stored in a version control tool, Meister for z/OS will provide the precise location of all source, objects and libraries, and where they were found when creating the binary.  When an application failure occurs, you need to trace the source of the offending event, similar to using fingerprints and DNA to track down the suspect of a crime.  With Meister for z/OS&rsquo;s advanced dependency discovery and reporting, every item used to create the binary is stored in an application &ldquo;footprint&rdquo; and reported in the application &ldquo;Build Audit Report&rdquo; regardless of versioning tool usage.</p> Blog: Why Use Meister Build Automation with Continuous Integration https://www.openmakesoftware.com/blog/2017/06/30/why-use-meister-build-automation-with-continuous-integration/ Fri, 30 Jun 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/06/30/why-use-meister-build-automation-with-continuous-integration/ <h2 id="build-automation-for-agile-teams-with-complex-builds">Build Automation for Agile Teams with Complex Builds</h2> <p>Meister Build Automation accelerates Continuous Integration to improve the management, control and speed of the software compile and link process. Meister and scale to large compile requirements supporting over 20,000 builds per day.  Meister build automation improves your agile development by matching the adaptive and iterative nature of your source code changes with the quick compilation of your binaries. Meister Build Automation eliminates build bottlenecks caused by slow compiles, manual updates to scripts and errors common to a build process that is driven by static processes. It provides: <img src="images/scaling.png" alt=""></p> <ul> <li>Build (compile/link) acceleration;</li> <li>Commercial strength server pooling and load balancing;</li> <li>Hundreds of compiler <em>plugins</em> for easy implementation;</li> <li>Reproducible builds - inside and outside the IDE;</li> <li>Dependency management;</li> <li>Microsoft .Net Multiple Solution File Dependency Management;</li> <li>Build audits;</li> <li>Build script generation;</li> <li>Custom playbooks to standardize and manage how compilers are called;</li> <li>Managed declared inputs using &lsquo;VPATH&rsquo;;</li> <li>Out of the box, Meister supports over 200 compile <em>Plugins</em>.</li> </ul> <h2 id="accelerated-builds-for-continuous-integration">Accelerated Builds for Continuous Integration</h2> <p>Meister Build Automation has the intelligence to drastically reduce your build times for full builds and down to a few seconds with accurate incremental builds. Meister uses Build Avoidance only re-building the source code that has been changed. So easy! Meister supports build acceleration for all supported languages including Java, .Net, C++, C-Unix and others including the ability to manage multiple .Net Solution files in a single parallel build stream.</p> <p>View the <a href="https://www.youtube.com/watch?v=9lHy-6UgMng&feature=youtu.be">Build Automation Demo</a></p> <h2 id="build-automation-insight">Build Automation Insight</h2> <p>When a build is executed in &lsquo;audit&rsquo; mode, Meister Build Automation grabs the version control item history, showing in the audit report the artifact version information, which can be used to trace a change in a build back to a particular developer. Meister&rsquo;s Build Insight exposes the source code and dependencies used to create your binaries giving you insight into the readiness of your software release even when the source is not stored in a version control tool.</p> <h2 id="jenkins-continuous-integration-at-scale">Jenkins Continuous Integration at Scale</h2> <p>OpenMake Meister&rsquo;s Server Pool management features include the ability to automatically select the most efficient machine in the pool for the fastest processing possible.  You can use Meister&rsquo;s in conjunction with <em>Jenkins</em> to scale your <em>Continuous Integration</em> across large build environment. And you can add Build Servers and Pools for load balancing as you need them keeping your cost low and managed.</p> <h2 id="automatic-dependency-management-andimpact-analysis">Automatic Dependency Management and Impact Analysis</h2> <p>Meister uses deep dependency scanning to make build decisions and to report on the impact of a potential software change. By running a Build with Impact Analysis enabled, a detailed report will be generated and can be shown &rsquo;exploded&rsquo; going from source to binary or &lsquo;imploded&rsquo; from binary to source.  Meister&rsquo;s Dependency Management is used at multiple levels. It is used to accelerate builds with both Build Avoidance and building in parallel, and is used to audit the build, showing all artifacts used even when they are not stored in version control.</p> <h2 id="playbooks-and-plugins">Playbooks and Plugins</h2> <p>Meister uses playbooks and <em>plugins</em>, to create consistent build logic. After implementing Meister, a large Financial Service went from several hundred build scripts to less than a dozen playbooks. If an update needs to be made to one of the playbooks, it is done in a single location and shared by all. Meister was the first to use <em>plugin</em> and <em>playbooks</em> for standardizing compiles but not the last.</p> <p>So, start accelerating your Builds today.  What are you waiting for?</p> <p>Download the <a href="https://github.com/OpenMake-Software/Meister/releases/">Free version of Meister at GitHub</a>.</p> Blog: Incremental Builds are Critical for Continuous Builds https://www.openmakesoftware.com/blog/2017/06/29/incremental-builds-are-critical-for-continuous-builds/ Thu, 29 Jun 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/06/29/incremental-builds-are-critical-for-continuous-builds/ <h2 id="incremental-builds-are-critical-for-fast-continuous-builds">Incremental Builds are Critical for Fast Continuous Builds.</h2> <p>Incremental builds are important for managing <a href="https://en.wikipedia.org/wiki/Incremental_build_model">continuous builds</a> for continuous delivery. Handing over a release from dev to prod must be easy and automated.  The production side of the house cannot always be expert in every team&rsquo;s application, there can be just too many in large organizations.  So one way to keep it simple is to perform incremental deploys when at all possible.  The key to incremental deploys is an incremental build.  One hand feeds the other.  In the Make world, or more specially ClearMake, this was called Build Avoidance.  It seems that the art of avoiding building objects has all been lost even though it is critical to agile developers and the DevOps process.Incremental Builds are critical for fast continuous build and breaking down waterfall barriers and adopting agile practices.]</p> <div> <img src="https://www.openmakesoftware.com/images/incrBuild-300x199.jpg" alt="incremental builds" /> </div> <h2 id="break-down-waterfall-barriers-with-incremental-builds">Break Down Waterfall Barriers with Incremental Builds</h2> <p>The <em>Build</em> itself must become incremental to fully support a development process where incremental changes are encouraged.  If not, your <em>Continuous Integration</em> process is impeded by a slow <em>Build</em> process written to support a waterfall methodology.  Hence, a slow compile creating all binaries each time – the &ldquo;big bang&rdquo; approach.  When using OpenMake Meister for powering <em>Build</em>, the default <em>Build</em> is an incremental <em>Build</em>.  Nothing special is required to execute a build using <em>Build Avoidance</em>.  Your <em>Build</em> will automatically be executed on an incremental basis.  Therefore, you are reducing your <em>Build</em> times down from hours to minutes.</p> <h2 id="reduced-build-times-for-continuous-build">Reduced Build Times for Continuous Build</h2> <p>Incremental <em>Builds</em> substantially decrease <em>Build</em> times by avoiding the execution of <em>Build</em> steps that are not needed.  This is a critical component of lean methodologies such as Agile Unified Process (Agile UP), Scrum, and Rhythm (Unified Build Infrastructure).  So, If you are looking for ways to improve <em>Build</em> times, the use of incremental <em>Build</em> will allow you to reach your goal.</p> <p>Incremental <em>Builds</em> determine all dependent relationships in the <em>Build</em> regardless of language.  For Java, an incremental <em>Build</em> determines the dependency of all .jar, .war and .ear files. This also includes jar files that are used by other jar files and their dependent java source files.   Similarly, in more traditional languages such as C/C++ or COBOL, dependency relationships are discovered for all included headers, copybooks, etc.</p> <p>Note:  If you are using Meister and choose to always execute <em>Builds</em> using a &ldquo;clean all&rdquo;  approach, pass the following parameters to the om process when executing your <em>Builds</em>:</p> <p>-a or clean all</p> <p>If the clean all parameter is not passed, your <em>Build</em> will be performed in the most efficient manner using <a href="https://www.openmakesoftware.com/blog/2017/06/27/build-avoidance-and-continuous-integration-accelerating-the-compile-process/"><em>Build</em> <em>Avoidance.</em></a></p> Blog: Build Avoidance and Continuous Integration: Accelerating the Compile Process https://www.openmakesoftware.com/blog/2017/06/27/build-avoidance-and-continuous-integration-accelerating-the-compile-process/ Tue, 27 Jun 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/06/27/build-avoidance-and-continuous-integration-accelerating-the-compile-process/ <h2 id="build-avoidance---work-smarter-not-harder">Build Avoidance - Work Smarter not Harder.</h2> <p>Build Avoidance is a build term that refers to the process of accelerating the compile process by not rebuilding objects that are up to date. This can improve your compile/link times substantially. Build Avoidance should be a primary function of your compile solution.</p> <div> <img src="https://www.openmakesoftware.com/images/worksmarter-300x200.jpg" alt="build avoidance" /> </div> <p>In my opinion, Build Avoidance should be a primary function of your compile solution. When used, it greatly improves the speed of your incremental builds. It is not &ldquo;new&rdquo; by any means. Build Avoidance was a term coined by IBM. It referred to the way ClearMake managed compiled objects. It worked then, and still works now.</p> <h2 id="cross-platform-build-avoidance">Cross Platform Build Avoidance</h2> <p>For most build solutions, the biggest challenge is to support build avoidance for all languages from Unix C to .Net and Java. For example, the &ldquo;<a href="https://www.gnu.org/software/make/">gnumake</a>&rdquo; based scripting languages only supports C/C++ languages. <a href="https://maven.apache.org/">Maven</a> scripting supports &ldquo;pseudo incremental builds&rdquo; which really is the opposite of what you would think. Maven&rsquo;s &ldquo;pseudo incremental builds&rdquo; does a &ldquo;clean all&rdquo; on the Projects that have changed, not on just the source code that has changed.  Doing a &ldquo;clean all&rdquo; is not avoiding a build, it is making sure that objects will be rebuilt by deleting them.</p> <p>Meister has supported Build Avoidance for all languages for over 20 years. Only OpenMake Meister can actually make the claim for C/C++, .Net, Java and yes, even COBOL.</p> <h2 id="beware-of-false-prophets">Beware of False Prophets</h2> <p>So the moral of the story is, if your build automation tool is not supporting Build Avoidance you should look for a better build solution. Build avoidance is the process of executing a build with full knowledge of the dependencies. In addition, it understands which dependencies are out of date and need to be re-built. This is a core function of build automation. The best way to speed up a build is to not recreate objects that are already available.</p> <h2 id="critical-to-continuous-integration-compile-and-link-process-must-work-smart">Critical to Continuous Integration: Compile and Link Process Must Work Smart</h2> <p>As long as we are on the topic of Build Avoidance, let&rsquo;s bring up how critically important it is to your Continuous Integration process. Remember - your Continuous Integration process is only as good as your build scripts.  To improve your CI process the engine that drives your compile and link process must work &ldquo;smart.&rdquo; What does &ldquo;smart&rdquo; mean you ask.  A smart build knows more than you do about how your application is put together. This means that is understands the dependencies (compile, provided, system scope, etc). With those dependencies is can accurately rebuild your application by only updating what has been changed.</p> <p>Yes, you can do this for Java, .Net or any native language such as C/C++. What does this buy you. First, in most cases your CI compile and link step will execute in less than a few minutes. Secondly, you are given a platform for doing pre-flight builds where any developer can re-compile the entire application, locally, without wasting an hour (or a few hours).</p> <p>If you want your CI process to run really fast and accurately, make your builds &ldquo;smart&rdquo; so you don&rsquo;t have to run &ldquo;clean all&rdquo; every time you execute a pre-flight or CI build.  Hey it is 2017 already. Start using your computer to orchestrate your compile and link process and stop writing static scripts that lack the ability to support your development process without your constant attention. This is real build automation.</p> Blog: OpenMake Receives SDTimes 100 Award https://www.openmakesoftware.com/blog/2017/06/07/openmake-receives-sdtimes-100-award/ Wed, 07 Jun 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/06/07/openmake-receives-sdtimes-100-award/ <h2 id="openmake-software-recognized-by-sd-times-in-the-devops-leadership-category">OpenMake Software recognized by SD Times in the DevOps Leadership category.</h2> <div> <img src="https://www.openmakesoftware.com/images/SDT100-logo-2017-large-292x300.png" alt="SD Times 2017" width="147" height="154" /> </div> <br> <p><strong>Las Vegas, NV</strong>–June 7 2017– OpenMake Software, visionaries in continuous build and continuous deployment, today announced receipt of the SDTimes 100 Award.  OpenMake received the award for excellence and leadership in the DevOps category. The award titled &ldquo;SDTimes 100&rdquo; recognizes leaders and innovators of the software development industry for 2017 in 11 separate industry segments.!</p> <p>&ldquo;The software development industry is led by innovative companies like OpenMake Software,&rdquo; David Rubinstein, editor-in-chief of SDTimes, said. &ldquo;When choosing the 2017 SDTimes 100, we carefully considered each organization&rsquo;s products and services, reputation with software development managers, and the new ideas and thought leadership that it brings to the industry. Thanks to companies like OpenMake, the art and science of software development continues to advance at a rapid pace.&rdquo;</p> <p>This SDTimes 100 award is an important achievement for OpenMake Software.  It recognizes OpenMake&rsquo;s stated goal to be a ‘disrupter’ in the Application Release Automation space. In March they began offering an DeployHub, a fully functional ARA solution designed for agile teams pursuing Continuous Deployment. &ldquo;Our goal is to help organizations master agile’s last mile- which is the point where production deployments keep up with the pace of agile” explained Tracy Ragan, CEO and Co-Founder.  “We appreciate that SDTimes has recognized the impact we are making on the agile DevOps space, particularly in maturing continuous delivery to support the full pipeline from development through production.</p> <h2 id="about-sd-times"><strong>About SD Times</strong></h2> <p>Launched in February 2000, BZ Media&rsquo;s SDTimes is the newspaper of record for the software development industry. SDTimes is published twice monthly in identical print and digital editions and can also be read online at <a href="https://sdtimes.com/">www.sdtimes.com</a>.</p> <h2 id="about-openmake-software"> <strong>About OpenMake Software</strong></h2> <p>OpenMake® Software delivers highly reusable DevOps Solutions that allow our customers to master agile’s last mile. As a 100% self-funded organization, we have the freedom to focus on our customer’s needs, delivering innovation in continuous builds and continuous deployment. An investment in our DevOps solutions or Professional Services forms a ‘technical partnership’ that provides you expertise and support to solve your toughest build and release problems for today and tomorrow.</p> <p>For more information on OpenMake Software, go to <a href="https://www.openmakesoftware.com">www.OpenMakeSoftware.com</a></p> Blog: No Meister Conversion required https://www.openmakesoftware.com/blog/2017/05/26/no-meister-conversion-required/ Fri, 26 May 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/05/26/no-meister-conversion-required/ <h2 id="no-meister-conversion-required-to-start-using-meister-build-services">No Meister Conversion Required to Start Using Meister Build services.</h2> <p>Meister conversion is a myth. To use Meister, our competitors would like you to believe that an Ant to Meister or Maven to <a href="https://www.openmakesoftware.com/meister-continuous-build/">Meister</a> conversion is required.  We are often asked, &ldquo;how long does it take to convert my Ant Scripts to Meister?&rdquo;  The answer is there is really no requirement to &ldquo;convert&rdquo; to Meister. Meister will do that for you by referencing the most accurate information found - the <a href="https://www.eclipse.org/">Eclipse</a> or <a href="https://dotnet.microsoft.com/en-us/">Microsoft .Net</a> Project files.</p> <div> <img src="https://www.openmakesoftware.com/images/makechange-300x200.jpg" alt="manage build changes" /> </div> <h2 id="ant-and-maven-extras">Ant and Maven Extras</h2> <p>Ant Scripts can do many steps including calling version control and executing a deployment.  If these kinds of steps are in your Ant scripts, you will need a Meister conversion to your CI workflow.  Meister includes calls to common activities that are included in CI Workflows. For example,  calling version control tools, static testing and automated configuration management.  You will end up creating a CI workflow that performs the same steps as your existing Ant Scripts.</p> <h2 id="meister-generates-a-new-script">Meister Generates a New Script</h2> <p>Instead of a Meister conversion, Meister will use your Eclipse Project files to generate the &ldquo;ant&rdquo; like process for creating your jars, wars, ears.  An Ant to Meister conversion is a misunderstanding of how Meister is configured.  Meister uses Targets instead of a script of any type. Instead of manually creating <em>Targets,</em> you can automatically generate them using your development IDE.  If you are currently executing builds using  scripts, and you use an IDE, you let Meister generate what you need.   Meister can automatically generate your <em>Targets</em> based on the IDE Project file using the Eclipse plug-in.  This is the preferred method.  Your IDE Project file is the most accurate reflections of how your Java component is built. Therefore automatically generating the Target based on the Project file will provide the most accurate results.</p> <p>In addition, by automatically generating your Java <em>Targets</em> via your IDE, you can improve your Continuous Integration process.  By auto generating your <em>Targets</em> you can synchronize the builds performed inside of the Eclipse IDE with the builds running outside of the Eclipse IDE.  This synchronization resolves changes made to the source code that has impacted the build scripts running outside of the IDE such as the case with refactoring, adding libraries, or changing compile options.</p> <h2 id="the-meister-tgt-plug-in">The Meister TGT Plug-in</h2> <p>The <em>Meister TGT Generation Plug-In</em> integrates with <strong>Eclipse, IBM Rational Application Developer, IBM Rational Software Architect,</strong> <strong>MyEclipse,</strong> <strong>Weblogic Workshop,</strong> <strong>IBM WebSphere Studio Application Developer,</strong> and <strong>CodeGear</strong>.</p> <p>When using the Target Generator, <em>Targets</em> are automatically generated and maintained by the Plug-In.  The Plug-In can be configured to automatically create and update .tgt’s when:</p> <p>A file is added or removed from a referenced Eclipse project</p> <p>Referenced Eclipse project properties such as Java Build Path are updated</p> <p>Developers choosing to use the Eclipse plug-in should first setup the configuration of the Eclipse Target Generator.  Once your configuration has been setup you can then define a <em>Project</em> and <em>Dependency Directory</em> and configure their Eclipse projects to use the <em>Target</em> generation and build features.   <strong>Note:</strong>  To validate that you have the Eclipse Target Generator already installed simply view the list of plug-ins available from the Eclipse IDE.  If the Meister Eclipse Target Generator is installed you will see “OpenMake TGT Generator” in the list.</p> Blog: Distributed builds and Configuring Remote Agents https://www.openmakesoftware.com/blog/2017/05/07/distributed-builds-and-configuring-remote-agents/ Sun, 07 May 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/05/07/distributed-builds-and-configuring-remote-agents/ <h2 id="using-distributed-builds-with-remote-agents-for-continuous-integration">Using Distributed Builds with Remote Agents for Continuous Integration.</h2> <p>Distributed builds requires the use of Remote Agents.  A common question I see on our support forums is how to configure Remote Agents to maximize machine resources.</p> <div> <img src="https://www.openmakesoftware.com/images/computer-network-300x225.jpg" alt="distributed builds" /> </div> <h2 id="configuring-remote-build-agents">Configuring Remote Build Agents</h2> <p>When using Meister you can configure a variety of Remote Agents types including:</p> <ul> <li>Physical</li> <li>Pre-Provisioned Virtual</li> <li>Amazon EC2, HyperV, and vCenter</li> </ul> <p>You can configure Remote Agents for load balancing, process utilization and <a href="https://en.wikipedia.org/wiki/Build_automation#Distributed_build_automation"> distribution </a> by setting the following parameters.</p> <h2 id="cpu--threshold">CPU % Threshold</h2> <p>Used to create a weighted value for use in deciding to which machine a queued activity will be assigned during load balancing. Recommend value is 80%.   For instance, if there are two <em>Remote Agents</em>, Agent A and Agent B, a CPU % Threshold can be assigned to determine which machine to use first.</p> <p>The equation for this weighted value is:</p> <p>CPU  % Threshold – Current CPU % Usage</p> <p>For example, if Agent A and Agent B both have a CPU % Threshold of 80%, and Agent A is currently running at 50% CPU, its weighted value will be 30. If Agent B is running at 70% CPU utilization, its weighted value will be 10. In this case, if all other settings for the two <em>Remote Agents</em> are the same, Agent A will have the queued activities assigned to it, since it has a higher differential between CPU % threshold and current CPU % usage.</p> <h2 id="queue-depth-threshold">Queue Depth Threshold</h2> <p>Determines how many <em>Workflow Activities</em> will be queued up to run before the KB server starts offloading activities to other <em>Remote Agents</em> in the <em>Server Pool</em>.  The value of this number is determined by the amount of resources available to process Workflow Activities.  You can enter a number between 1 and 200.  The initial recommended value to 10 and can be increased if additional Remote Agents are being started unnecessarily.  The higher the number, the larger the queue.</p> <h2 id="max--of-running-workflows">Max # of Running Workflows</h2> <p>Controls how many <em>Workflows</em> can be run simultaneously on the same <em>Remote Agent</em>.  Note: this value is different from the value set by the OMSUBMIT_MAX_USER_PROC  variable, which controls how many simultaneous <em>Workflow</em> processes can be run on a <em>Remote Agent</em>, or better known as parallelized processes.</p> <p>By configuring and defining your Remote Agents to server pools you can easily maximize server resources which will improve your workflow performance and speed.</p> Blog: Build Environment Variables https://www.openmakesoftware.com/blog/2017/05/01/build-environment-variables/ Mon, 01 May 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/05/01/build-environment-variables/ <h2 id="build-environment-variables-and-how-to-manage-the-details">Build Environment Variables and how to manage the details.</h2> <p>Build Environment Variables are critical, detailed pieces of the over build process. If you are using OpenMake Meister to manage your build you can also manage specific Environment Variables for each step.  You can also define Global variables for all steps.  In both the <em>Configure Machine Environment</em> and <em>Configure Activity Environment</em> fields of OpenMake Meister, you can define either variables and/or scripts to configure the environment that your machine or <em>Workflow Activity</em> work within. Global configuration settings are the default for all <em>Workflow Activities</em> on all machines unless you override them at this level.</p> <div> <img src="https://www.openmakesoftware.com/images/Meister-final-grey-stacked-white-background-300x300.png" alt="Meister and Environment Variables" /> </div> <p>Configurations set at the machine level will be the default for all <em>Workflow Activities</em> on that machine unless you override them at the <em>Workflow Activities</em> level. You can set both machine- and <em>Workflow Activities</em> level configurations on the <em>Activities Tab</em> screen.  When you select a machine, <em>Configure Machine Environment</em> appears; likewise, when you select a <em>Workflow Activity</em> listed under the machine, <em>Configure Activity Environment</em> appears.</p> <h2 id="to-sum-it-up">To Sum It Up</h2> <p>So in summary, you can set Environment Variables at 3 levels, the highest level is the Global setting.  Defines the Variable for all machines and Workflow Activities.  Secondly, you can define them at the machine or Server Pool level, and all Activities running on that machine or Server Pool will use those variables.   And within an Activity, you can assign Variables to that specific  Activity.   In our 7.5 release we will be adding an Environment Library so you can store configurations in the library and assign the library name at the Global, Workflow Activity or Machine (Server Pool) level. This allows you to more easily manage the Environment Variables and reuse them across Activities and Servers.</p> Blog: LDAP Group Members using ldapsearch and Java https://www.openmakesoftware.com/blog/2017/04/13/ldap-group-members-using-ldapsearch-and-java/ Thu, 13 Apr 2017 00:00:00 +0000 https://www.openmakesoftware.com/blog/2017/04/13/ldap-group-members-using-ldapsearch-and-java/ <h2 id="using-ldapsearch-with-ldap-group-members">Using ldapsearch with LDAP Group Members.</h2> <p>Ldapsearch has become a handy tool for us. Here is how we use it. Many of our customers are striving to protect a single sign-on, so LDAP becomes critical to achieving their goals. We&rsquo;ve done quite a bit of work around LDAP coding. The use of ldapsearch has become a popular part of our coding. I thought it would be helpful to expose has we have used it for our applications.<img src="images/Image-for-Collaborative-300x212.jpg" alt=""></p> <div> <img src="https://www.openmakesoftware.com/images/Image-for-Collaborative-300x212.jpg" alt="LDAP" /> </div> <br> <p>We use the LDAP server provided by <a href="https://www.forumsys.com/2014/02/22/online-ldap-test-server/">Forum Systems Online LDAP Test Server</a>.</p> <p>Here is the ldapsearch command line:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ldapsearch -W -h ldap.forumsys.com -D <span style="color:#b44">&#34;cn=read-only-admin,dc=example,dc=com&#34;</span> -b <span style="color:#b44">&#34;dc=example,dc=com&#34;</span> <span style="color:#b44">&#34;ou=mathematicians&#34;</span> </span></span></code></pre></div><p>-W : Prompt for password</p> <p>-h : ldap server to use</p> <p>-D : is the binddn (userid to login to the ldap server with)</p> <p>-b : is the base search root and the last parameter is the search filter</p> <p>Results from the ldapsearch:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>Enter LDAP Password: </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># extended LDIF</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic">#</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># LDAPv3</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># base &lt;dc=example,dc=com&gt; with scope subtree</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># filter: ou=mathematicians</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># requesting: ALL</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic">#</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># mathematicians, example.com</span> </span></span><span style="display:flex;"><span>dn: <span style="color:#b8860b">ou</span><span style="color:#666">=</span>mathematicians,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span>uniqueMember: <span style="color:#b8860b">uid</span><span style="color:#666">=</span>euclid,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span>uniqueMember: <span style="color:#b8860b">uid</span><span style="color:#666">=</span>riemann,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span>uniqueMember: <span style="color:#b8860b">uid</span><span style="color:#666">=</span>euler,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span>uniqueMember: <span style="color:#b8860b">uid</span><span style="color:#666">=</span>gauss,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span>uniqueMember: <span style="color:#b8860b">uid</span><span style="color:#666">=</span>test,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span>ou: mathematicians </span></span><span style="display:flex;"><span>cn: Mathematicians </span></span><span style="display:flex;"><span>objectClass: groupOfUniqueNames </span></span><span style="display:flex;"><span>objectClass: top </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># search result</span> </span></span><span style="display:flex;"><span>search: <span style="color:#666">2</span> </span></span><span style="display:flex;"><span>result: <span style="color:#666">0</span> Success </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># numResponses: 2</span> </span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># numEntries: 1</span> </span></span></code></pre></div><p>Here is the same ldap query using Java:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">java.util.ArrayList</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">java.util.Hashtable</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">java.util.Vector</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.Context</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.NameNotFoundException</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.NamingEnumeration</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.NamingException</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.directory.Attribute</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.directory.Attributes</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.directory.SearchControls</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.directory.SearchResult</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.ldap.InitialLdapContext</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">javax.naming.ldap.LdapContext</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">public</span> <span style="color:#a2f;font-weight:bold">class</span> <span style="color:#00f">memberof</span> </span></span><span style="display:flex;"><span><span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">public</span> <span style="color:#a2f;font-weight:bold">static</span> <span style="color:#0b0;font-weight:bold">void</span> <span style="color:#00a000">main</span><span style="color:#666">(</span>String<span style="">\</span><span style="color:#666">[</span><span style="">\</span><span style="color:#666">]</span> args<span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> ArrayList members <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> ArrayList<span style="color:#666">();</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> String ldapUsername <span style="color:#666">=</span> <span style="color:#b44">&#34;cn=read-only-admin,dc=example,dc=com&#34;</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> String ldapPassword <span style="color:#666">=</span> <span style="color:#b44">&#34;password&#34;</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> String servername <span style="color:#666">=</span> <span style="color:#b44">&#34;ldap://ldap.forumsys.com:389&#34;</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> String searchbase <span style="color:#666">=</span> <span style="color:#b44">&#34;dc=example,dc=com&#34;</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> String searchfilter <span style="color:#666">=</span> <span style="color:#b44">&#34;ou=mathematicians&#34;</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> Hashtable<span style="color:#666">&lt;</span>String<span style="color:#666">,</span> Object<span style="color:#666">&gt;</span> env <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> Hashtable<span style="color:#666">&lt;</span>String<span style="color:#666">,</span> Object<span style="color:#666">&gt;();</span> </span></span><span style="display:flex;"><span> env<span style="color:#666">.</span><span style="color:#b44">put</span><span style="color:#666">(</span>Context<span style="color:#666">.</span><span style="color:#b44">SECURITY</span><span style="">\</span>_AUTHENTICATION<span style="color:#666">,</span> <span style="color:#b44">&#34;simple&#34;</span><span style="color:#666">);</span> </span></span><span style="display:flex;"><span> env<span style="color:#666">.</span><span style="color:#b44">put</span><span style="color:#666">(</span>Context<span style="color:#666">.</span><span style="color:#b44">SECURITY</span><span style="">\</span>_PRINCIPAL<span style="color:#666">,</span> ldapUsername<span style="color:#666">);</span> </span></span><span style="display:flex;"><span> env<span style="color:#666">.</span><span style="color:#b44">put</span><span style="color:#666">(</span>Context<span style="color:#666">.</span><span style="color:#b44">SECURITY</span><span style="">\</span>_CREDENTIALS<span style="color:#666">,</span> ldapPassword<span style="color:#666">);</span> </span></span><span style="display:flex;"><span> env<span style="color:#666">.</span><span style="color:#b44">put</span><span style="color:#666">(</span>Context<span style="color:#666">.</span><span style="color:#b44">INITIAL</span><span style="">\</span>_CONTEXT<span style="">\</span>_FACTORY<span style="color:#666">,</span> <span style="color:#b44">&#34;com.sun.jndi.ldap.LdapCtxFactory&#34;</span><span style="color:#666">);</span> </span></span><span style="display:flex;"><span> env<span style="color:#666">.</span><span style="color:#b44">put</span><span style="color:#666">(</span>Context<span style="color:#666">.</span><span style="color:#b44">PROVIDER</span><span style="">\</span>_URL<span style="color:#666">,</span> servername<span style="color:#666">);</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// the following is helpful in debugging errors </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">// env.put(&#34;com.sun.jndi.ldap.trace.ber&#34;, System.err); </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> </span></span><span style="display:flex;"><span> LdapContext ctx<span style="color:#666">;</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">try</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> ctx <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> InitialLdapContext<span style="color:#666">(</span>env<span style="color:#666">,</span> <span style="color:#a2f;font-weight:bold">null</span><span style="color:#666">);</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> NamingEnumeration results <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">null</span><span style="color:#666">;</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">try</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> SearchControls controls <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SearchControls<span style="color:#666">();</span> </span></span><span style="display:flex;"><span> controls<span style="color:#666">.</span><span style="color:#b44">setSearchScope</span><span style="color:#666">(</span>SearchControls<span style="color:#666">.</span><span style="color:#b44">SUBTREE</span><span style="">\</span>_SCOPE<span style="color:#666">);</span> </span></span><span style="display:flex;"><span> results <span style="color:#666">=</span> ctx<span style="color:#666">.</span><span style="color:#b44">search</span><span style="color:#666">(</span>searchbase<span style="color:#666">,</span> searchfilter<span style="color:#666">,</span> controls<span style="color:#666">);</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">while</span> <span style="color:#666">(</span>results<span style="color:#666">.</span><span style="color:#b44">hasMore</span><span style="color:#666">())</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> SearchResult searchResult <span style="color:#666">=</span> <span style="color:#666">(</span>SearchResult<span style="color:#666">)</span> results<span style="color:#666">.</span><span style="color:#b44">next</span><span style="color:#666">();</span> </span></span><span style="display:flex;"><span> Attributes attributes <span style="color:#666">=</span> searchResult<span style="color:#666">.</span><span style="color:#b44">getAttributes</span><span style="color:#666">();</span> </span></span><span style="display:flex;"><span> Attribute attr <span style="color:#666">=</span> attributes<span style="color:#666">.</span><span style="color:#b44">get</span><span style="color:#666">(</span><span style="color:#b44">&#34;uniqueMember&#34;</span><span style="color:#666">);</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">for</span> <span style="color:#666">(</span><span style="color:#0b0;font-weight:bold">int</span> i<span style="color:#666">=</span><span style="color:#666">0</span><span style="color:#666">;</span>i<span style="color:#666">&lt;</span>attr<span style="color:#666">.</span><span style="color:#b44">size</span><span style="color:#666">();</span>i<span style="color:#666">++)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> members<span style="color:#666">.</span><span style="color:#b44">add</span><span style="color:#666">((</span>String<span style="color:#666">)</span> attr<span style="color:#666">.</span><span style="color:#b44">get</span><span style="color:#666">(</span>i<span style="color:#666">));</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">catch</span> <span style="color:#666">(</span>NameNotFoundException e<span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// The base context was not found. </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">// Just clean up and exit. </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">catch</span> <span style="color:#666">(</span>NamingException e<span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">throw</span> <span style="color:#a2f;font-weight:bold">new</span> RuntimeException<span style="color:#666">(</span>e<span style="color:#666">);</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">finally</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">if</span> <span style="color:#666">(</span>results <span style="color:#666">!=</span> <span style="color:#a2f;font-weight:bold">null</span><span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">try</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> results<span style="color:#666">.</span><span style="color:#b44">close</span><span style="color:#666">();</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">catch</span> <span style="color:#666">(</span>Exception e<span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// Never mind this. </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">if</span> <span style="color:#666">(</span>ctx <span style="color:#666">!=</span> <span style="color:#a2f;font-weight:bold">null</span><span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">try</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> ctx<span style="color:#666">.</span><span style="color:#b44">close</span><span style="color:#666">();</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">catch</span> <span style="color:#666">(</span>Exception e<span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// Never mind this. </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// Loop through the memebers of the and print them out </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#a2f;font-weight:bold">for</span> <span style="color:#666">(</span><span style="color:#0b0;font-weight:bold">int</span> i <span style="color:#666">=</span> <span style="color:#666">0</span><span style="color:#666">;</span> i <span style="color:#666">&lt;</span> members<span style="color:#666">.</span><span style="color:#b44">size</span><span style="color:#666">();</span> i<span style="color:#666">++)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> System<span style="color:#666">.</span><span style="color:#b44">out</span><span style="color:#666">.</span><span style="color:#b44">println</span><span style="color:#666">(</span>members<span style="color:#666">.</span><span style="color:#b44">get</span><span style="color:#666">(</span>i<span style="color:#666">));</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">catch</span> <span style="color:#666">(</span>NamingException e1<span style="color:#666">)</span> </span></span><span style="display:flex;"><span> <span style="color:#666">{</span> </span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// TODO Auto-generated catch block </span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> e1<span style="color:#666">.</span><span style="color:#b44">printStackTrace</span><span style="color:#666">();</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span> <span style="color:#666">}</span> </span></span><span style="display:flex;"><span><span style="color:#666">}</span> </span></span></code></pre></div><p>Results from the Java program:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#b8860b">uid</span><span style="color:#666">=</span>euclid,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span><span style="color:#b8860b">uid</span><span style="color:#666">=</span>riemann,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span><span style="color:#b8860b">uid</span><span style="color:#666">=</span>euler,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span><span style="color:#b8860b">uid</span><span style="color:#666">=</span>gauss,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span><span style="display:flex;"><span><span style="color:#b8860b">uid</span><span style="color:#666">=</span>test,dc<span style="color:#666">=</span>example,dc<span style="color:#666">=</span>com </span></span></code></pre></div> Blog: Dot Net Solution Builds with Complex Dependencies https://www.openmakesoftware.com/blog/2016/12/09/dot-net-solution-builds-with-complex-dependencies/ Fri, 09 Dec 2016 00:00:00 +0000 https://www.openmakesoftware.com/blog/2016/12/09/dot-net-solution-builds-with-complex-dependencies/ <h2 id="dot-net-solution-builds-are-complicated-with-multiple-solution-files">Dot Net Solution builds are Complicated with Multiple Solution Files.</h2> <p>We often get customers who have multiple Dot <a href="https://dotnet.microsoft.com/en-us//download">Net Solutions</a> for creating a single application.   While Microsoft may advise against the practice, large companies tend to push the limit in software development requiring that more than one Dot Net solution file be used.  The .Net IDE cannot handle this requirement, which is were we come in.</p> <div> <img src="https://www.openmakesoftware.com/images/Meister-final-grey-stacked-white-background-300x300.png" alt="Meister and Environment Variables" /> </div> <p>OpenMake Meister can support the building of multiple Dot Net solution files, treating them as one big Dot Net solution file.  By doing this it resolves all cross solution dependencies delivering incremental builds and deploys, and accelerated .Net builds using parallel build processing.</p> <p>If you need to execute a full build of multiple solutions in Meister, you simply use the .Net plug-in to create a Meister Target file for each .Net Project in the solution.  Meister will then generate a build control file that contains all projects for all solutions.  It uses MSBuild to execute the compile/link, but it manages the dependencies, incremental processing and parallel builds across the projects.</p> <p>For companies who are doing large .Net builds with multiple solutions, we have seen speed improvement of up to 50% over what other build management solutions can offer such as IBM UBuild. These solutions cannot do incremental builds or build in parallel. What they do instead is have you write Nant scripts, break up the solution compiles onto different machines, and build circular until you have come to the end.  Not very efficient, but the best that can be done without doing any type of real intelligence work on the dependencies.  Products offered by Electric Cloud cannot help with this type of problem as well.  They depend on the use of GnuMake or old Nmake files that are not used by the .Net framework.</p> <p>So the good news is there is a strong solution for managing multiple solution .Net files.</p>