Thursday, 8 October 2015

Create/update Jar file in Unix without affecting the Manifest.MF

Update a jar file :  jar -uf  <jar_name>  <path_to_file/folder to be updated>.
 The <Path_To_File> should be same as the path inside the jar file .

Update jar without affecting existing Manifest : 

jar  -cmf  META\-INF/MANIFEST.MF  <Jar_File_Name>  <Files_To_Be_Packed>

Tuesday, 16 June 2015

Create Package by Maven


Create the assembly.xml and call it from pom.xml.

assembly.xml
-----------------

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd">
<id>assembly</id>
  <formats>
    <format>jar</format>
  </formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>

<fileSet>
<outputDirectory>product/template-topologies</outputDirectory>
<directory>${env.HOME}/workspace/src/main/java/topologies</directory>
<includes>
<include>*.topology</include>
<include>**/*.*.topology</include>
</includes>
<fileMode>744</fileMode>
</fileSet>

 </fileSets>

 </assembly>



Main Pom.xml
------------------

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.5.5</version>
        <dependencies>
          <dependency>
            <groupId>your.group.id</groupId>
            <artifactId>my-assembly-descriptor</artifactId>
            <version>1.0-SNAPSHOT</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <!-- This is where we use our shared assembly descriptor -->
              <descriptorRefs>
                <descriptorRef>assembly.xml</descriptorRef>
              </descriptorRefs>
            </configuration>
          </execution>
        </executions>
      </plugin>

Monday, 15 June 2015

How to execute scripts(.ksh,.sh stc) by maven

Use Maven exec plugin to execute the script.
In <executable> you can specify the type of file.
In <workingDirectory> provide the path to the script file.
In <arguments> provide the script file name and any parameter used inside the script.

       <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.4.0</version>
                <executions>
                         <execution>
                            <id>createSymLinks</id>
                            <phase>install</phase>
                            <goals>
                              <goal>exec</goal>
                                                        </goals>
                            <configuration>
                                      <executable>ksh</executable>
                                      <workingDirectory>${env.HOME}/config/src
                                      </workingDirectory>
                                      <arguments>
                                                  <argument>create_links.ksh</argument>
                                                  <argument>${BUILD_VERSION}</argument>
                                       </arguments>
                            </configuration>
                         </execution>
                   </executions>
        </plugin>

Friday, 15 May 2015

Building C++ application in Maven

You have to use com.github.maven-nar plugin for building the CPP application.


If you have multiple modules in CPP application ,you can define the parent pom. Define the group-id in the module tag of the parent pom.
-----------------------------------------------------------------------------------------------------
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.amdocs.amcApiPar</groupId>
  <artifactId>amcApiPar</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>amcApiParent</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
  <modules>
    <module>com</module>
    <module>mro</module>
    <module>test</module>
    <module>multiThreadTest</module>
    <module>dm</module>
  </modules>
  
</project>

If you want to create .so file then you have to define the library type as shared.
------------------------------------------------------------------------------------------------

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
<parent>
 <groupId>com.amdocs.amcApiPar</groupId>
 <artifactId>amcApiPar</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</parent>

    <groupId>com</groupId>
    <artifactId>com</artifactId>
    <packaging>nar</packaging>
    <version>main</version>

    <properties>
        <skipTests>true</skipTests>
<base.dir>${env.HOME}/workspace/AMC_Build</base.dir>
<srcDir>${base.dir}/${env.BUILD_VERSION}/amcapi</srcDir>
<buildDir>${base.dir}/proj</buildDir>
<configDir>${buildDir}/amc_config</configDir>
<mopinftlDir>${buildDir}/mopinftl</mopinftlDir>
<proj.varient>V64</proj.varient>
<amcgdd.dir>${srcDir}/gdd</amcgdd.dir>
<ginftl.dir>${buildDir}/ginftl${env.BUILD_VERSION}${proj.varient}</ginftl.dir>
<infgn.dir>${srcDir}/infgn</infgn.dir>
<include.xerces-c2>${env.XERCES_HOME}/include</include.xerces-c2>
<usr>/usr</usr>
<lib.openssl>${env.OPENSSL_HOME}/lib</lib.openssl>
<lib.ace>${env.ACE_HOME}/lib</lib.ace>
<lib.local64>/usr/local64/lib</lib.local64>
<gamc.dir>${buildDir}/gamc${env.BUILD_VERSION}${proj.varient}</gamc.dir>
<lib.local>/usr/local/lib</lib.local>
<lib.usr>/usr/lib64</lib.usr>
<lib.xerces-c2>${env.XERCES_HOME}/lib</lib.xerces-c2>
<lib.xerces-c>xerces-c</lib.xerces-c>
<include.ace>${env.ACE_HOME}</include.ace>
<include.local64>/usr/local64/include</include.local64>
<include.openssl>${env.OPENSSL_HOME}/include</include.openssl>
    </properties>
  
    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <groupId>com.github.maven-nar</groupId>
                <artifactId>nar-maven-plugin</artifactId>
                <version>3.1.0</version>
                <extensions>true</extensions>

                <configuration>
                    <layout>NarLayout20</layout>
                <linker>   <!-- Linkers-->
                   <name>icpc</name>
                  <options>
<option>-L${lib.openssl}</option>
<option>-L${lib.ace}</option>
<option>-L${lib.local64}</option>
<option>-L${gamc.dir}/lib</option>
<option>-L${lib.local}</option>
<option>-L${lib.usr}</option>
<option>-L${lib.xerces-c2}</option>
<option>-l${lib.xerces-c}</option>
                   </options>
                </linker>
 
<cpp>
<name>icpc</name>
<sourceDirectory>${srcDir}</sourceDirectory>
<includes>
             <include>**/mro/src/AMC_MroMainFunc.cpp</include>
<include>**/mro/src/AmcApis.cpp</include>
<include>**/log/src/*.cpp</include> 
<include>**/com/src/*.cpp</include>  
</includes>
            <includePaths>

<!-- <includePath>${srcDir}/log/inc</includePath>
          <includePath>${srcDir}/mro/inc</includePath>
          <includePath>${srcDir}/com/inc</includePath>
          <includePath>${srcDir}/shr</includePath>
          <includePath>${srcDir}/pub</includePath>
  
         <includePath>${configDir}/v${env.BUILD_VERSION}/pub</includePath>
          <includePath>${mopinftlDir}/v${env.BUILD_VERSION}/pub</includePath>
          <includePath>${buildDir}/gamc${env.BUILD_VERSION}${proj.varient}/cnt</includePath>
          <includePath>${buildDir}/gamc${env.BUILD_VERSION}/amcapi</includePath>-->
  
  <!--<includePath>${amcgdd.dir}</includePath>
  <includePath>${amcgdd.dir}/cnt</includePath> 
          <includePath>${ginftl.dir}/cnt</includePath>
  <includePath>${infgn.dir}</includePath>
          <includePath>${include.xerces-c2}</includePath>
          <includePath>${usr}</includePath>
          <includePath>${usr}/include</includePath>
          <includePath>/usr/lib/x86_64-redhat-linux5E/include</includePath>-->






  
          <includePath>${srcDir}/com/inc</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/shr</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/pub</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/gdd</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/infgn</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/log/inc</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/mro/inc</includePath>
  <includePath>${include.xerces-c2}</includePath>
  <includePath>/usr/include</includePath>
  <includePath>${include.ace}</includePath>
  <includePath>/usr/lib/x86_64-redhat-linux5E/include</includePath>
  <!--<includePath>${include.local64}</includePath> 
  <includePath>${include.openssl}</includePath>-->
  
  
  
   
          
  
            </includePaths>
    
   <!--Compiler args -->
            <options>
              <option>-c</option>
<option>-g</option>
<option>-DNO_LIANT</option>
<option>-DUNIX</option>
<option>-DXERCES_2</option>
<option>-D_USE_GMP</option>
<option>-pthread</option>
<option>-D__linux</option>
<option>-fPIC</option>
<option>-ansi</option>
<option>-D__ACE_INLINE__</option>
<option>-DAMC_COMP</option>
<option>-D__linux_</option>
<option>-D__osf__</option>
<option>-D__linux__</option>
            </options>
            <clearDefaultOptions/>
            <compileOrder/>
</cpp>
        <libraries>
             <library>
                 <type>shared</type>
             </library>
         </libraries>
       </configuration>
    </plugin>
<plugin>
    <groupId>com.coderplus.maven.plugins</groupId>
    <artifactId>copy-rename-maven-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
      <execution>
        <id>rename-file</id>
        <phase>install</phase>
        <goals>
          <goal>rename</goal>
        </goals>
        <configuration>
          <sourceFile>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/com/target/nar/lib/amd64-Linux-icpc/shared/libcom-main.so</sourceFile>
          <destinationFile>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/com/target/libamcapi.so</destinationFile>
        </configuration>
      </execution>
    </executions>
  </plugin>
  </plugins>
</build>    
</project>


If you want to create executable then define the library as executable.
-------------------------------------------------------------------------------------

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
<parent>
 <groupId>com.amdocs.amcApiPar</groupId>
 <artifactId>amcApiPar</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</parent>

    <groupId>mro</groupId>
    <artifactId>amc_mro</artifactId>
    <packaging>nar</packaging>
    <version>main</version>

    <properties>
        <skipTests>true</skipTests>
<base.dir>${env.HOME}/workspace/AMC_Build</base.dir>
<srcDir>${base.dir}/${env.BUILD_VERSION}/amcapi</srcDir>
<buildDir>${base.dir}/proj</buildDir>
<configDir>${buildDir}/amc_config</configDir>
<mopinftlDir>${buildDir}/mopinftl</mopinftlDir>
<proj.varient>V64</proj.varient>
<amcgdd.dir>${srcDir}/gdd</amcgdd.dir>
<ginftl.dir>${buildDir}/ginftl${env.BUILD_VERSION}${proj.varient}</ginftl.dir>
<infgn.dir>${srcDir}/infgn</infgn.dir>
<include.xerces-c2>${env.XERCES_HOME}/include</include.xerces-c2>
<usr>/usr</usr>
<lib.openssl>${env.OPENSSL_HOME}/lib</lib.openssl>
<lib.ace>${env.ACE_HOME}/lib</lib.ace>
<lib.local64>/usr/local64/lib</lib.local64>
<gamc.dir>${buildDir}/gamc${env.BUILD_VERSION}${proj.varient}</gamc.dir>
<lib.local>/usr/local/lib</lib.local>
<lib.usr>/usr/lib64</lib.usr>
<lib.xerces-c2>${env.XERCES_HOME}/lib</lib.xerces-c2>
<lib.xerces-c>xerces-c</lib.xerces-c>
<include.ace>${env.ACE_HOME}</include.ace>
<include.local64>/usr/local64/include</include.local64>
<include.openssl>${env.OPENSSL_HOME}/include</include.openssl>
<lib.amcapi>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/com/target</lib.amcapi>
    </properties>
  
    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <groupId>com.github.maven-nar</groupId>
                <artifactId>nar-maven-plugin</artifactId>
                <version>3.1.0</version>
                <extensions>true</extensions>

                <configuration>
                    <layout>NarLayout20</layout>
                <linker>
                   <name>icpc</name>
                  <options>
<option>-L${lib.openssl}</option>
<option>-L${lib.ace}</option>
<option>-L${lib.local64}</option>
<option>-L${gamc.dir}/lib</option>
<option>-L${lib.local}</option>
<option>-L${lib.usr}</option>
<option>-L${lib.xerces-c2}</option>
<option>-L${lib.amcapi}</option>
<option>-l${lib.xerces-c}</option>
<option>-lamcapi</option>
<option>-lssl</option>
<option>-lcrypto</option> 
                   </options>
                </linker>
 
<cpp>
<name>icpc</name>
<sourceDirectory>${srcDir}</sourceDirectory>
<includes>
<include>**/log/src/amc1_Logger.cpp</include>
             <include>**/mro/src/*.cpp</include>  
</includes>
<excludes>
<exclude>**/mro/src/AMC_MroMainFunc.cpp</exclude>
<exclude>**/mro/src/AmcApis.cpp</exclude>
</excludes>
            <includePaths>

  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/log/inc</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/mro/inc</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/dm/inc</includePath>
          <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/com/inc</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/shr</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/pub</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/gdd</includePath>
  <includePath>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/infgn</includePath>
  <includePath>${include.xerces-c2}</includePath>
  <includePath>/usr/include</includePath>
  <includePath>${include.ace}</includePath>
  <includePath>/usr/lib/x86_64-redhat-linux5E/include</includePath>
  
            </includePaths>
    
   <!--Compiler args -->
            <options>
             <option>-c</option>
<option>-g</option>
<option>-DNO_LIANT</option>
<option>-DUNIX</option>
<option>-DXERCES_2</option>
<option>-D_USE_GMP</option>
<option>-pthread</option>
<option>-D__linux</option>
<option>-fPIC</option>
<option>-ansi</option>
<option>-D__ACE_INLINE__</option>
<option>-DAMC_COMP</option>
<option>-D__linux_</option>
<option>-D__osf__</option>
<option>-D__linux__</option>
<option>-D_REENTRANT</option>
            </options>
           
</cpp>
        <libraries>
             <library>
                 <type>executable</type>
             </library>
         </libraries>
       </configuration>
    </plugin>
<plugin>
    <groupId>com.coderplus.maven.plugins</groupId>
    <artifactId>copy-rename-maven-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
      <execution>
        <id>rename-file</id>
        <phase>install</phase>
        <goals>
          <goal>rename</goal>
        </goals>
        <configuration>
          <sourceFile>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/mro/target/nar/bin/amd64-Linux-icpc/amc_mro</sourceFile>
          <destinationFile>/devuser/mnc/mnc/bismayam/workspace/AMC_Build/main/amcapi/mro/target/amc_mro</destinationFile>
        </configuration>
      </execution>
    </executions>
  </plugin>
  </plugins>
</build>    
</project>


To copy the resources .
-----------------------------


<plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>copy-mro-src</id>
            <phase>process-resources</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${bin.dir}</outputDirectory>
              <resources>          
                <resource>
                 <directory>${src.dir}/mro/src</directory>
                  <includes>
                  <include>*.ksh</include>
                  </includes>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
 
 
 <execution>
            <id>copy-amccore-pi</id>
            <phase>process-resources</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${bin.dir}</outputDirectory>
              <resources>          
                <resource>
                 <directory>${base.dir}/${env.BUILD_VERSION}/amccore/pi/src</directory>
                  <includes>
                  <include>/*.sql</include>
                  </includes>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
</plugin>


Thank You.

Friday, 8 May 2015

Create Multiple Jars from single pom.xml in Maven

Note : It is recommended to create a single from one pom. If possible then try to decompose the package structure to create multiple projects and create one jar for one project. If it is not helpful then use the below process to create multiple jars from single pom.


<plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>

          <execution>
            <id>any_Id</id>
            <goals><goal>jar</goal></goals>
            <phase>package</phase>
            <configuration>
<finalName>JarOne</finalName>
                <encoding>ISO-8859-1</encoding>
                <classifier>Core</classifier> <!-- This will be appended with the jar created with finalName tag value if present-->
               <includes>
<include>**/*.*</include>              
              </includes>
              <excludes>
                          <exclude>**/test.*</exclude>
              </excludes>  
            </configuration>
          </execution>

 <execution>
            <id>any_Id</id>
            <goals><goal>jar</goal></goals>
            <phase>package</phase>
            <configuration>
<finalName>JarOne</finalName>
                <encoding>ISO-8859-1</encoding>
                <classifier>NonCore</classifier> <!-- This will be appended with the jar created-->
               <includes>
<include>**/*.*</include>              
              </includes>
              <excludes>
                          <exclude>**/test.*</exclude>
              </excludes>  
            </configuration>
          </execution>

 </executions>
</plugin>

Create more than one <execution> to create individual jars. The names of the jars will be appended with the value of <classifier> tag. If you are including <finalName> tag then the jar name will be as follows.

JarOne-Core.jar
JarOne-NonCore.jar


Difference between class level and object locking and static object lock

1) Class level locking will lock entire class, so no other thread can access any of other synchronized blocks. 2) Object locking will lo...