Skip to content

Instantly share code, notes, and snippets.

@abbaspour
Created April 22, 2013 08:57
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save abbaspour/5433382 to your computer and use it in GitHub Desktop.
Save abbaspour/5433382 to your computer and use it in GitHub Desktop.
Convert a NetBeans project to Maven
#!/usr/bin/perl
# generates Maven pom.xml based on nbproject
# d640492
use strict;
use warnings;
use File::Basename;
sub print_dep($$$);
sub print_pom_header($$$);
sub print_pom_trailer;
-e 'nbproject/project.xml' or die "no nbproject/project.xml";
-e 'nbproject/project.properties' or die "no nbproject/project.properties";
open(STDOUT, '> pom.xml');
my $project_name = `fgrep name nbproject/project.xml | head -1 | perl -ne 'print \$1 if /<name>(.+)<\\/name>/;'`;
chomp $project_name;
my $src_dir = `grep ^src.dir= nbproject/project.properties | head -1 | awk -F= '{print \$2}'`;
chomp $src_dir;
$src_dir =~ s/\r//g;
my $test_src_dir = `grep ^test.src.dir= nbproject/project.properties | head -1 | awk -F= '{print \$2}'`;
chomp $test_src_dir;
$test_src_dir =~ s/\r//g;
my $all_deps = `grep ^file.reference. nbproject/project.properties | awk -F= '{print \$2}' | sort | uniq`;
my @deps = split (/\n/, $all_deps);
my ($name,$path,$suffix);
print_pom_header($project_name, $src_dir, $test_src_dir);
for my $d (@deps) {
chomp $d;
$d =~ s|\\\\|\\|g;
$d =~ s|\\|/|g;
$d =~ s|\s||g;
($name,$path,$suffix) = fileparse($d);
next unless $name =~ /(.+).jar$/;
my $artifactId = $1;
print_dep($artifactId,$artifactId,$d);
}
print_pom_trailer;
exit 0;
sub print_dep($$$) {
my ($artifactId,$groupId,$systemPath) = (@_);
print <<EOL
<dependency>
<artifactId>$artifactId</artifactId>
<groupId>$groupId</groupId>
<scope>system</scope>
<version>1.0</version>
<systemPath>\${basedir}/$systemPath</systemPath>
</dependency>
EOL
}
sub print_pom_header($$$) {
my ($name, $src, $test) = (@_);
print <<EOL
<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>
<groupId>com.telstra.raa</groupId>
<artifactId>$name</artifactId>
<packaging>jar</packaging><!-- war -->
<version>1.0-SNAPSHOT</version>
<name>$name</name>
<build>
<sourceDirectory>$src</sourceDirectory>
<testSourceDirectory>$test</testSourceDirectory>
</build>
<dependencies>
EOL
}
sub print_pom_trailer {
print <<EOL
</dependencies>
</project>
EOL
}
@lokize
Copy link

lokize commented Feb 2, 2020

hi, how to use this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment