I've my project ready to deploy so I need to create an executable jar for distribution. After reading online I'm now trying to clean and build
my project (ProjectMaven
), it is a Maven
project with dependencies (on Netbeans 8
)
My project has a dependency on another project I've created using Maven
After reading this and this answers I've made my pom.xml
file like this:
<?xml version="1.0" encoding="UTF-8"?>
<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.dwnz.project</groupId>
<artifactId>ProjectMaven</artifactId>
<name>DwnzProject</name>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<!-- nothing here -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>view.MainFrame</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.googlecode.jcsv</groupId>
<artifactId>jcsv</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
<dependency>
<groupId>com.dazito.retro.eventbus</groupId>
<artifactId>RetroEventBusMaven</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>2.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.6.Final</version>
</dependency>
</dependencies>
</project>
com.dazito.retro.eventbus
is my other Maven project I created which this project depends on.
Here is the output created by Maven when I press Clean and Build
on my project (ProjectMaven
).
Compiling 48 source files to C:\Users\Dwnz\Documents\NetBeansProjects\ProjectMaven\target\classes
-------------------------------------------------------------
COMPILATION ERROR :
-------------------------------------------------------------
view/MainFrame.java:[9,32] error: cannot find symbol
view/MainFrame.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
api/CallsToGUI.java:[7,32] error: cannot find symbol
view/toolbar/ToolBar.java:[9,32] error: cannot find symbol
view/toolbar/ToolBar.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/menu/ExportTableDialog.java:[9,32] error: cannot find symbol
view/menu/ExportTableDialog.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/toolbar/AskPasswordDialog.java:[9,32] error: cannot find symbol
view/toolbar/AskPasswordDialog.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/menu/ImportTableDialog.java:[7,32] error: cannot find symbol
view/menu/ImportTableDialog.java:[8,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/MainFrame.java:[107,18] error: cannot find symbol
view/rightPanel/RightTable.java:[7,32] error: cannot find symbol
view/rightPanel/RightTable.java:[8,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/toolbar/ToolBar.java:[34,18] error: cannot find symbol
view/menu/ExportTableDialog.java:[46,18] error: cannot find symbol
view/toolbar/AskPasswordDialog.java:[52,12] error: cannot find symbol
view/menu/ImportTableDialog.java:[36,18] error: cannot find symbol
view/rightPanel/RightTable.java:[40,18] error: cannot find symbol
view/actionlisteners/ImportResultsActionListener.java:[10,32] error: cannot find symbol
view/actionlisteners/ImportResultsActionListener.java:[11,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
21 errors
-------------------------------------------------------------
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 4.311s
Finished at: Thu Oct 02 07:32:54 BST 2014
Final Memory: 30M/116M
------------------------------------------------------------------------
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project ProjectMaven: Compilation failure: Compilation failure:
view/MainFrame.java:[9,32] error: cannot find symbol
view/MainFrame.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
api/CallsToGUI.java:[7,32] error: cannot find symbol
view/toolbar/ToolBar.java:[9,32] error: cannot find symbol
view/toolbar/ToolBar.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/menu/ExportTableDialog.java:[9,32] error: cannot find symbol
view/menu/ExportTableDialog.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/toolbar/AskPasswordDialog.java:[9,32] error: cannot find symbol
view/toolbar/AskPasswordDialog.java:[10,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/menu/ImportTableDialog.java:[7,32] error: cannot find symbol
view/menu/ImportTableDialog.java:[8,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/MainFrame.java:[107,18] error: cannot find symbol
view/rightPanel/RightTable.java:[7,32] error: cannot find symbol
view/rightPanel/RightTable.java:[8,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
view/toolbar/ToolBar.java:[34,18] error: cannot find symbol
view/menu/ExportTableDialog.java:[46,18] error: cannot find symbol
view/toolbar/AskPasswordDialog.java:[52,12] error: cannot find symbol
view/menu/ImportTableDialog.java:[36,18] error: cannot find symbol
view/rightPanel/RightTable.java:[40,18] error: cannot find symbol
view/actionlisteners/ImportResultsActionListener.java:[10,32] error: cannot find symbol
view/actionlisteners/ImportResultsActionListener.java:[11,49] error: package com.dazito.retro.eventbus.buses.singletons does not exist
-> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
What am I doing wrong? How can I fix this so I can clean and build the project? The project has no compilation errors and does executes fines when pressing the run button inside netbeans.
I do not know so good this plugin, but there is a possibility that you maybe want to consider.
Instead of the assembly plugin, use shade plugin. http://maven.apache.org/plugins/maven-shade-plugin/
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
<exclude>.settings/**</exclude>
<exclude>*.classpath</exclude>
<exclude>*.project</exclude>
<exclude>*.txt</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
And to create a whole .exe including all, or .exe which launch a .jar with all, use launch4j plugin https://github.com/lukaszlenart/launch4j-maven-plugin
<plugin>
<groupId>com.akathist.maven.plugins.launch4j</groupId>
<artifactId>launch4j-maven-plugin</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<id>l4j-gui</id>
<phase>package</phase>
<goals>
<goal>launch4j</goal>
</goals>
<configuration>
<headerType>gui</headerType>
<outfile>target/Project.exe</outfile>
<jar>target/${project.artifactId}-${project.version}.jar</jar>
<!-- if <dontWrapJar>true</dontWrapJar> change to this conf <jar>${project.artifactId}-${project.version}.jar</jar> -->
<dontWrapJar>false</dontWrapJar>
<errTitle>Error in launch4j plugin</errTitle>
<classPath>
<mainClass>path.Main</mainClass>
</classPath>
<icon>Project.ico</icon>
<jre>
<minVersion>1.5.0</minVersion>
<maxVersion>1.6.0</maxVersion>
<initialHeapSize>512</initialHeapSize>
<maxHeapSize>1024</maxHeapSize>
</jre>
<versionInfo>
<fileVersion>1.0.0.0</fileVersion>
<txtFileVersion>1.0.0.0</txtFileVersion>
<fileDescription>des</fileDescription>
<copyright>Copyright (c) 2014 </copyright>
<companyName>comp</companyName>
<productVersion>3.0.0.0</productVersion>
<txtProductVersion>${project.version}</txtProductVersion>
<productName>Project</productName>
<internalName>Project</internalName>
<originalFilename>Project.exe</originalFilename>
</versionInfo>
</configuration>
</execution>
</executions>
</plugin>
Wow, this is great! It's like killing two birds with one bullet. Thanks! Only problem by now is that when double clicking the generated .exe file nothing happens. With command line nothing happens as well, no output is generated. Do you happen to know why?
I've figured out the problem is with the images inside my app, there is something not properly loading them. I'm getting this exception:
Could not load the icon: /images/view-refresh.png Exception in thread "main" java.lang.NullPointerException
. If I remove the images it loads just fine. Thanks!