Skip to content

Instantly share code, notes, and snippets.

@bglopez
Forked from abbaspour/nb_to_mvn.pl
Created May 29, 2023 21:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bglopez/99f79101c62500d636617443e862944d to your computer and use it in GitHub Desktop.
Save bglopez/99f79101c62500d636617443e862944d 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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment