20

I am having a similar problem to this question. I have tried all the suggestions listed and am still at a loss. My issue is that I am trying to build a maven project and distribute it to other machines, but the jar files are not being populated with a correct Manifest. Each time I build and run I get the following error: no main manifest attribute, in myjar.jar. Is there some sort of configuration file I need to edit? I just don't know what is going on. I have attempted this fix also, but to no avail.

Community
  • 1
  • 1
derigible
  • 964
  • 5
  • 15
  • 32

2 Answers2

49

You can add it into project's pom file, inside <project> tag:

<build>
    <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.4</version>
          <configuration>
              <archive>
                  <manifest>
                      <mainClass>your.main.class</mainClass>
                  </manifest>
              </archive>
          </configuration>
      </plugin>
  </plugins>
</build>
kazy
  • 1,111
  • 2
  • 14
  • 24
kofemann
  • 4,217
  • 1
  • 34
  • 39
  • You know how many of these hacks I had to use to make a Netbeans Java Maven project run like a Netbeans Java Ant project? Why don't they make this more seamless? – trilogy Jul 20 '21 at 19:05
  • Don't try to make it look like ant. Use https://en.m.wikipedia.org/wiki/Convention_over_configuration to keep your software as maven standard project to avoid custom configurations. – kofemann Jul 20 '21 at 19:37
  • How else do you assume I create a distributable jar file with dependencies ? I need a lib folder with the dependency jars, and I need an executable jar that includes the classpath to that folder, and I need that jar to know what the main class is. None of these features come out of the box for a maven project. Has nothing to do with conventions. – trilogy Jul 20 '21 at 19:46
30

Another option is to use the maven shade plugin. Unlike the maven jar plugin showed by tigran, the maven shade plugin includes your dependencies in the generated jar. A sample usage of the plugin is :

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>your.main.Class</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
fboulay
  • 401
  • 3
  • 5