Friday 28 November 2014

Cobertura configuration with jenkins

 Follow below Steps to Integrate cobertura with Jenkins

  Step 1) - Install cobertura plugin in Jenkins

  You can install plugin through Manage Jenkins

   Click on Manage Jenkins --> Manage Plugins --> Available --> Search for cobertura
   plugin --> Click on check box--> On bottom of page you find two buttons to install the
   plugin choose which suites you.

   Skip first point if cobertura plugin already installed on your Jenkins.

   Step 2) - Enable Cobertura in projects

   A)- Choose desired Project on which you want to configure cobertura.
               Click on Configure :: refer image


   B)- Go to Build Section ::
     Add command in Goals and options
     cobertura:cobertura –Dcobertura.report.format=xml 
     cobertura:cobertura -  This command initiate coverage functionality.
     – Dcobertura.report.format=xml - From this we are specifying that we need
      coverage report in  xml format.Refer below image.







    C)- After that Go to Post-build Actions ::
            Select Option Publish cobertura coverage report
        If you have multi module project then surely you have several coverage.xml file in
        different folders, So to cover all we need to provide a general path, you can see in
        above SnagIt, I used   
        **/target/site/cobertura/coverage.xml,
        so it can cover all coverage file under different target folders.

  Step 3)- Creating Views for Cobertura ::

       Go to Jenkins dashboard a Click on + option as mention in below screen

       It open a window where you can enter view name and check view option

      After providing required information, Click on Ok button -  It open a configuration
      widgets,you can configure it as required,  Required to choose below two options
      You can select your preferred job from Job Filters section

       And also need to provide portlets position ,Please refer


Enjoy!!

Monday 1 September 2014

Jenkins Issues

In this post I am adding those several issues which I faced using Jenkins,
I will add more whenever I found


1)-  [ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.0:sonar (default-cli) on project project-name: Execution default-cli of goal org.codehaus.mojo:sonar-maven-plugin:2.0:sonar failed: A required class was missing while executing org.codehaus.mojo:sonar-maven-plugin:2.0:sonar: org/sonatype/aether/graph/DependencyFilter

If you see this error on Jenkins console it means there is compatibility issue of maven version  installed at your system and sonar-maven-plugin version  used in your project POM, In my case I have maven 3.1 at Jenkins server and 2.0 version of sonar-maven-plugin in POM , 

So to resolve this issues you need to upgrade your sonar-maven-plugin version as I upgrade it from 2.0 to 2.1 



                                <plugin>
                                    <groupId>org.codehaus.mojo</groupId>
                                     <artifactId>sonar-maven-plugin</artifactId>
                                     <version>2.1</version>
                                  </plugin>

2)- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (1) on project project-name: An Ant BuildException has occured: exec returned: 1

                                                       OR

[exec] bower backbone.paginator#0.8.1  ECMDERR Failed to execute "git ls-remote --tags --heads git://github.com/test.git", exit code

To solve this issue you need to follow two steps

1) - Check permission on  git://github.com/test.git , try to open the git url(which shows in error console (red color )) in browser with the same user name and password which you are using in Jenkins.

2)- Some time due to some permission issue Jenkins not able to hit directly to git url using git,
So we need to update git config.
you can simply fire a command  which tells to use https instead of git

git config --global url."https://".insteadOf git://

3)- I have also mention one jenkins issue in my other post , you can refer
http://pathakamit783.blogspot.in/2014/08/jenkins-you-must-use-post-method-to.html




4) -  Test coverage is showing zero %


Some time we are in dilemma that  why our test coverage is showing zero % when we have some successful test,
Like you can see the above snagit , I have 8 success test but my test coverage is still zero,
I thought it is an issue  but after wasting plenty of time , I got one conclusion as I have less number of line coverage as compared to my lines of code , So the total percentage is too low to displayed by sonar
To check this follow below steps
     a)- Click on  0.0% line coverage.
     b)- Select your test case.
     c)- In your particular test you can see line coverage percentage.
     d)- To see covered line select Line to cover from drop down.

5)- " Can not execute SonarQube analysis: Can not execute Findbugs with a timeout threshold value of 1200000 milliseconds: TimeoutException -> [Help 1]"

If you are facing such issue means your project is too large and it need more time to create findbugs-result.xml ,So to fix this issue you need to increase  sonar.findbugs.timeout uptu appropriate miliseconds.
you can find this property file here. Logon to sonar dashboard.
Settings > General Settings > Java > Findbugs > sonar.findbugs.timeout

Please refer below snagit.



6)- Can not execute SonarQube analysis: Can not execute Findbugs:            
      java.lang.OutOfMemoryError: GC overhead limit exceeded -
To fix this issue you need to increase memory size and also add GCoverheadlimit option under MAVEN_OPTS of jenkins job.Please refer below snip.


 






Thursday 28 August 2014

Could not find artifact com.sun:tools:jar:1.5.0 at specified path

When we are working on maven project then several time we  get an error
      Could not find artifact com.sun:tools:jar:1.5.0 at specified path
We have several ways to solve this issue,You can follow any one which solve your issue,
I have added some solution in  sequence as I preferred

1)- Modify location of jre in eclipse

Right click on your project --> Properties --> Select Java Build Path --> Click on Libraries Tab -->
Double click on Jre System Library --> Click on installed Jre (A pop will open) --> Double click on check jre --> change JRE Home from C:\Program Files\Java\jre6 to C:\Program Files\Java\jdk1.6.0_27
That's it surely solve your problem without changing anything in you project configuration.


2)-  Change in project POM

you can also add dependency for tool jar , You can use below clip for this purpose

                 <dependency>
                     <groupId>com.sun</groupId>
                     <artifactId>tools</artifactId> 
                     <version>1.6.0</version>
                     <scope>system</scope>
                     <systemPath>C:\Program Files\Java\jdk1.6.0_27\lib\tools.jar</systemPath> 
              </dependency>


I will add others method also after some time,


Tuesday 26 August 2014

Jenkins "You must use POST method to trigger builds" Issue

If you are using jenkins and if you ever see any error like this

"You must use POST method to trigger builds. (From scripts you may instead pass a per-project authentication token, or authenticate with your API token.) "

Then it will solve by two ways

1)- you can refer below link
 https://issues.jenkins-ci.org/browse/JENKINS-19368

but it didn't worked for me then I will choose the second way

I don't know how javascript got disabled in my browser after enabling everything seems ok for me.

To enable javascript in firefox

a)-type about:config
b)-Click on I'll be carefull, I promise
c)-search for javaScript:enable and set value to true

Hope this helps someone,
<img class="bm-sh-badge" src="https://www.blogmint.com/blogger/badgeForSefHostedBlog/cdbb53fe90754aab906d3fee6530a7dc?image=one-pixel.png" alt="badge"/>

Monday 21 July 2014

Saturday 28 June 2014

Use SocketAppender to write log on other machine

In this tutorial I will explain how can we write log from one system to other system,
For this purpose I will use SocketAppender of Log4j.For more info regard SocketAppender you can go through this link
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html

For Demonstration I will use two log4j configuration file and two java class
one for client machine(localHost) and other for server or remote machine


=========  client log configuration File (client.xml)=========


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="socket" class="org.apache.log4j.net.SocketAppender">
  <param name="Port" value="1342"/>
  <param name="RemoteHost" value="192.000.000.00"/>
  <param name="ReconnectionDelay" value="5000"/>
  <param name="LocationInfo" value="true"/>
  </appender>
 <root>
    <param name="level" value="INFO"/>
    <appender-ref ref="socket" />
  </root>

</log4j:configuration>

class = The SocketAppender class
RemoteHost =  Ip of that machine where you want to write your log
Port = port number of Remote machine

=========  Server log configuration File (server.xml)=========

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="rolling" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file"   value="C:/Test/LogFile.log" />
        <param name="datePattern" value="'.'yyyy-MM-dd-HH " />
        <param name="append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n"/>
        </layout>
    </appender>
<root> 
    <param name="level" value="INFO"/>
    <appender-ref ref="rolling" /> 
  </root>
</log4j:configuration>

Class = you can use any log4j class as per your requirement I am using  DailyRollingFileAppender.


========= Client Java class =========

package com.amit.blog.clientlogging;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.xml.DOMConfigurator;

/**
 * This class use to logging on remote server on xml defined port.
*/
public class Client
{
    private static Log logger = LogFactory.getLog(Client.class);
    public static void main(String[] a)
    {
      try
      {
        DOMConfigurator.configure("client.xml");
         for(int i=0;i<10;i++)
          {
              logger.info("writing on remote server !");      
          }
      }
       catch (Exception e)
       {
           logger.info("Failed to write on remote server");
       }
    }
}


========= Server Java class =========

package com.amit.blog.serverlogging;

import org.apache.log4j.net.SimpleSocketServer;
/**
 * This class use to receive the log entries from client on port open by method.
 */

public class Server
{
  public static void main(String[] args)
  {
    try
       {
        String defaultPort="1342"; //Need to mention one port to open for writing

         /** This class is provided by log4j
         * It takes two parameters, namely the port to start the
         * server on and the server side log4j configuration file.
         */
        String[] arguments = {defaultPort, "server.xml"};
        SimpleSocketServer.main(arguments);
       }
       catch (Exception ex)
        {
          System.out.println(ex.getMessage());
        }
   }
}



I think It will help you to manage your log.






Saturday 24 May 2014

Mail in java with multiple recipients,multiple cc with multiple file attachment

I am going to show you one simple Java program from which you can send email to multiple persons with multiple attachment,you can also add CC  to your mail from this program,
I will give you one general program which consist multiple recipients ,Multiple CC recipients and multiple file attachment
You can change it according to your preferences.


package com.sendMail;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

    public class sendMailWithAttach {
        private static String SMTP_HOST_NAME = "smtp.gmail.com";
        private static String SMTP_PORT = "587";
        private static  String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

        public static String  sendMail(String recipients[],String 
           ccrecipients[], String subject,String message, String sentfrom,
           String filepath1,String filepath2) throws MessagingException
          {
            boolean debug = true;
            String sendStatus=null;
            Properties props = new Properties();
            props.put("mail.smtp.host",SMTP_HOST_NAME);
            props.put("mail.smtp.auth", "true");
            props.put("mail.debug", "true");
            props.put("mail.smtp.port",SMTP_PORT);
            props.put("mail.oyazen.socketFactory.class", SSL_FACTORY);
            props.put("mail.smtp.starttls.enable", "true");
           // This block is used to create session event
            Session session = Session.getDefaultInstance(props,new
             javax.mail.Authenticator()
                  {
                    protected PasswordAuthentication getPasswordAuthentication()
                           {
                            return new
                            PasswordAuthentication("yourEmailId","password");
                            }
                    });
             // If you want to enable debug then set a session debug true,
             session.setDebug(debug);
             Message msg = new MimeMessage(session);
             InternetAddress addressFrom = new InternetAddress(sentfrom);
             msg.setFrom(addressFrom);
             InternetAddress[] addressCC = new
             InternetAddress[ccrecipients.length];
                 for (int i = 0; i < ccrecipients.length; i++)
                      {
                       addressCC[i] = new InternetAddress(ccrecipients[i]);
                      }
              msg.setRecipients(Message.RecipientType.CC,addressCC);
              InternetAddress[] addressTo = new InternetAddress[recipients.length];
                   for (int i = 0; i < recipients.length; i++)
                        {
                            addressTo[i] = new InternetAddress(recipients[i]);
                        }
               msg.setRecipients(Message.RecipientType.TO, addressTo);
               msg.setSubject(subject);
               BodyPart messageBodyPart1 = new MimeBodyPart();
               BodyPart messageBodyPart2 = new MimeBodyPart();
               BodyPart messageBodyPart3 = new MimeBodyPart();
               Multipart multipart = new MimeMultipart();
               MimeBodyPart htmlPart = new MimeBodyPart();
               htmlPart.setContent(message, "text/html");
                  multipart.addBodyPart(htmlPart);
                  //Creating config for two file
               FileDataSource fileDataSource1 =new FileDataSource(filepath1);
               messageBodyPart1.setDataHandler(new  
               DataHandler(fileDataSource1));
               messageBodyPart1.setFileName("FileFirst");
               multipart.addBodyPart(messageBodyPart1);
               FileDataSource fileDataSource2 =new FileDataSource(filepath2);
               messageBodyPart2.setDataHandler(new 
              DataHandler(fileDataSource2));
               messageBodyPart2.setFileName("FileSecond");
               multipart.addBodyPart(messageBodyPart2);
               msg.setContent(multipart);
                  try {
                       Transport.send(msg);
                       sendStatus="Mail Succes";
                       }
                       catch(Exception e) {
                            e.printStackTrace();
                       }
          return sendStatus;
     }
       
/**
 * Main method
 * */       
    public static void main(String args[])
        {
           String recipient[]={"abc@gmail.com","xyz@gmail.com"};
           String CCrecipient[]={"CCabc@gmail.com","CCxyz@gmail.com"};
           String sentfrom="FromMe@gmail.com";
           String subject="Testing";
           String message="hello PFA";
           String filepath1="/home/amit/Key.txt";
           String filepath2="/home/amit/Key.txt";
           try {
                String result=sendMail (
                 recipient,CCrecipient,subject,message,sentfrom,filepath1,filepath2);
            }
           catch (MessagingException e) {
                e.printStackTrace();
            }
       }
    }


Please let me know if you face any issue while running this example

Thursday 22 May 2014

Works with Windows registry

Today I am going to explain how we can fetch required data from windows registry like unistalltion String,
In one of my project I followed below steps to get uninstalltion String to unistall required softwares.

If you have OS 32 then you need to read this registry to get data
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall

or if you have OS 64
Then you need to check both
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall
and
HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall

First way to accomplish this work
Step 1=

First we need to save registry data into a text file,you can execute this string from java class

Runtime.getRuntime().exec("reg export HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall "+"\""+ tempFile + "\"");

Step 2=
This text file consist some unreadable character so first we need to remove those,
you can put your logic to create a new file with the help of tempFile after removing unreadable character
I  used this code to get readable file

InputStreamReader input = null;
OutputStreamWriter output = null;
try {
input = new InputStreamReader(new FileInputStream(new File(tempFile)));
output = new OutputStreamWriter(new FileOutputStream(readableFile));
while (true) {
int ch = input.read();
if (ch < 0)
break;
else if ('\n' == (char) ch || ch >= 32 && ch <= 127) {
output.write(ch);

}
}


Step 3=
Now you have readable file which have data like
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\3519-9895-1195-8563]
"DisplayName"="testSoft"
"DisplayIcon"="C:\\Program Files (x86)\\testSoft-03\\.install4j\\i4j_extf_10_3zfp0v_1at2cp6.ico"
"UninstallString"="C:\\Program Files (x86)\\ntestSoft\\bin\\uninstall.exe"
"Publisher"="testSoft, Inc."
"URLInfoAbout"="http://testSoft.com"
"InstallLocation"="C:\\Program Files (x86)\\testSoft"
"DisplayVersion"="2.7.2-03"
"VersionMajor"=dword:00000002
"VersionMinor"=dword:00000007

So from this file you can fetch required value and to unistall any software  you can fetch value of UninstallString and execute  below query
Runtime.getRuntime().exec("+softPath+").waitFor();
where softPath=C:\\Program Files (x86)\\testSoft\\bin\\uninstall.exe

Second way 

You can  also use wmic to get registry data,but there is some issue with that when you use this you can see, it doesn't have data of all softwares which installed on your system,
No doubt it easy, so to get complete software data you can combine  both way in one to accomplish your work

To uninstall any software with the help of wmic

you can follow above two steps to generate readable format,you just need to change string query of first step
Runtime.getRuntime().exec("cmd /c wmic product get description >"+"\""+ tempFile + "\"");
I have used description to get software name
after that to uninstall any software  I just need to execute this String
Runtime.getRuntime().exec("wmic product where name=\'"+ description + "\' call uninstall").waitFor();

Hope it helps any one

Tuesday 20 May 2014

Get Data variation of sonar to create custom excel report

If you are using sonar for your projects and want to generate a excel report.
then you can complete this task by two way,
first one by using web API provided by sonar team
or do R & D with sonar DB(Not a standard way as mention on sonar group dashboard)

First way-
To go with web Api you can use sonar web client,
after that you can use below code to call web service for desired data.


 String url = "http://localhost:9000/";(url of Sonar)
 String login = "root";(Database user name)
 String password = "root";(Database password)
 Sonar sonar = new Sonar(new HttpClient4Connector(new Host(url, login,password)));
 Resource soanrExample= sonar.find(ResourceQuery
            .createForMetrics("projectKey", "statements"));

projectKey=You can get this from projects table or from your pom its combination of
                     <groupId>:<artifactId>

Measure statements = soanrExample.getMeasure("statements");
    System.out.println("statements : " + statements.getMetricKey()
            + " === " + statements.getFormattedValue());
like "statments" you can also pass "test" "coverage",minor_violations etc

Second Way-

As I am facing issue with variations I am not able to get variation data through web API(which shows in bracket 73 statements(+4))

So for this I did some work on DB part.
These are some steps which I followed to get variation data

Step1-
Get Project key with the help of WEB API(or through DB from projects table)

Step2-
Get project_id from projects table with the help of project key

Step3-
Get period1_param,period2_param etc from snapshots table  with the help of project Id,
from here you can get variation period like 15 days or 30 days,Like this

       if(rs.getString("period1_param")!=null){
  if(rs.getString("period1_param").equalsIgnoreCase("7")){
VARIATIONCOUNT7DAYS="1";
 }
 if (rs.getString("period1_param").equalsIgnoreCase("30")) {
VARIATIONCOUNT30DAYS="1";
 }
  }

Step4-
Use this query to generate data per project

select distinct proj.name NAME_OF_PROJ,metric.name metric_name, metric.description Description, projdesc.value value,projdesc.variation_value_1,projdesc.variation_value_2,projdesc.variation_value_3,projdesc.variation_value_4,projdesc.variation_value_5 ,snap.created_at CREATED_DATE from projects proj inner join snapshots snap on snap.project_id=proj.id inner join " + "(select max(snap2.id) as id from snapshots snap2 where snap2.project_id  in ("+projectId+") GROUP BY snap2.project_id ) as Lookup on Lookup.id=snap.id inner join project_measures projdesc on projdesc.snapshot_id=snap.id inner join metrics metric on  projdesc.metric_id =metric.id where  metric.id between '1' and "+metricid_Count+'

This query gives you all required data with the variation value,
You can put additional logic  to get compare variation for different period,

Hope this help any one.
Let me know if I miss anything






Tuesday 15 April 2014

Windows batch stuff

Today I am going to explain  some important  stuffs of windows batch,which may help you to do some batch programming

1)-First one is related to admin permission,Generally this is the first step of any batch file program.
To accomplish this task I am showing you to simplest way,
you can check for user net session like

    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo Success: Congrats, You have administrative permissions.
        echo. 
       ) else (
        echo Failure: Current permissions inadequate. Please contact your NetOps Team
        timeout 10 >nul
        exit
    )
  

This will check user right

2)-To put blank line between two statement
use   echo.

3)-To check user OS version
If you want to get user OS version means user using 64 bit or 32 bit then you can use this statement

IF EXIST "%PROGRAMFILES(X86)%" (set bit=64) ELSE (set bit=32)
 if %bit%==64 ( echo user have 64 bit operating system) else (  echo user have 32 bit operating system)



 4)-To get first sub-directory name
Assume you have any directory name A and in this directory you have 3 more sub directory name as B,C,D and you want to get name of first listing directory then you can use this  stuff,In my program I used this stuff to update java path,
it will search sub directory  under "C:\Program Files\Java" and set first directory name in javaPath variable,then you can use this variable where you want

for /f "delims=" %%F in ('dir "C:\Program Files\Java" /b /o-n') do set javaPath=%%F
          setx PATH "%PATH%;%javaPath%\bin" /M


5)-To check java is already installed or not
I think for this task registry is best option.

for /f tokens^=2^ delims^=^" %%i in ('reg query HKEY_CLASSES_ROOT\jarfile\shell\open\command /ve 2^>nul') do set javaInstallpath=%%i
 

 Set javaString=Java
 

Echo.%javaInstallpath% | findstr %javaString%>nul && (
    echo It seems java is already installed on your system,
    ) || (
   echo.
   echo It seems Java is not installed on your system.
   )




2^>nul-Its a optional one ,you can remove this from code,Its used to hide the error message ,if it fails to get java instance on given location


6)-Extraction of zip file using 7-Zip
If you don't want to use vb script you can third party tool for your purpose,
I hope you have 7-Zip in c drive,Then in batch file you can use these three line to extract required zip at required destination,
You can see I have used %~dp0 it have the path of your batch file directory,means if your batch file is in d:\test\batch\testBatch.bat then %~dp0 have path upto d:\test\batch
 c:
cd C:\Program Files\7-Zip
7z x "%~dp0\devTool.zip" -o%~dp0\ *.* -r


7)-Downloading software from http location-In my view the best and simple way to accomplish this one is to use power shell
You just need to put 2  line of code in you batch file to download any software or file,it use one ps file you need to provide this file in addition

psFileToDownload.ps1--copy and paste these three line in txt  file and save it as
psFileToDownload.ps1

param($url, $filename)
$client = new-object System.Net.WebClient 
$client.DownloadFile( $url, $filename)


In Batch
Put these two line in batch file

powershell Set-ExecutionPolicy Unrestricted
powershell -ExecutionPolicy RemoteSigned -File %psPath% %downloadLocation% "%~dp0\TestDownload.zip"

psPath--Path  of  psFileToDownload.ps1
downloadLocation=The http location from where you want to download any file
TestDownload.zip=The required file will save as TestDownload.zip

8)-To put sleep between to statement you can use timeout
timeout 10>nul
sleep for 10 sec








Saturday 8 March 2014

Junit -Cannot run program error :: CreateProcess error=87, The parameter is incorrect



While running Junit if you are facing any error like this

Cannot run program "C:\Program Files\Java\jdk1.6.0_30\jre\bin\javaw.exe" (in directory "E:\Amit\Iworkspace\SpringMVC"): CreateProcess error=87, The parameter is incorrect


Then to resolve this you need to follow some simple steps:

1)-Go to this link https://bugs.eclipse.org/bugs/show_bug.cgi?id=327193 download
bug327193_3.4.2_hack.zip from attachment section.


2)- Back up existing eclipse/plugins/org.eclipse.jdt.launching_3.*.*.jar 

3) Copy and paste classes and patch.txt  from the attached patch to org/eclipse/jdt/internal/launching in your org.eclipse.jdt.launching JAR (replace existing files) 

4) (optional) Edit the META-INF /MANIFEST.MF file in your org.eclipse.jdt.launching JAR file by removing everything starting from the first "NAME:" entry. Make sure you leave two (2) line break characters at the end of the file.

Re-start eclipse


Tuesday 4 March 2014

Sync windows 8 cellphone with ubuntu

IF you bought a new windows phone and want to add your favourite playlist from your PC to phone ,Then I have a simply way to accomplish this,
You need  to follow simple steps 

1)-Plug  cellphone to your ubuntu PC
2)-Open RhythmBox music player,you can see your phone under Device option





3)-From  import file(music>>import file)add your favourite playlist
4)-Select your phone then click on sync with library

5)-It's done,enjoy your favourite song on your phone