2015-04-28 1012 views
11

我想用我的maven项目获得一个可用的jar文件。Maven将pom.xml中的mainClass添加到正确的文件夹路径

构建的部分是:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-checkstyle-plugin</artifactId> 
      <version>2.14</version> 
      <dependencies> 
       <dependency> 
        <groupId>com.puppycrawl.tools</groupId> 
        <artifactId>checkstyle</artifactId> 
        <version>6.4.1</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <consoleOutput>true</consoleOutput> 
       <configLocation>${basedir}/src/test/resources/checkstyle_swt1.xml</configLocation> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <descriptor>src/assembly/src.xml</descriptor> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

    </plugins> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.0</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
        <archive> 
         <manifest> 
          <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
          <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
          <addClasspath>true</addClasspath> 
          <mainClass>org.jis.Main</mainClass>         
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

所以现在我的问题是,我不知道如何正确地进入我的pom.xml后来实施mainclass到我的jar文件。 的文件夹结构为:的src/main/JAVA /组织/ JIS/Main.java 但如果我添加以下行

<mainClass>src.main.java.org.jis.Main</mainClass> 

这是行不通的。

在此先感谢

回答

18

首先,你的主类不包括src/main/java。查看该Java文件中的包声明。例如,package org.jis;,然后将主类添加到该类。换句话说,它只是org.jis.Main

您需要配置maven-jar-plugin而不是maven-compiler-plugin。 jar-plugin负责打包和创建manifest.MF。

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     ... 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <mainClass>fully.qualified.MainClass</mainClass> 
      </manifest> 
      </archive> 
     </configuration> 
     ... 
     </plugin> 
    </plugins> 
    </build> 
+0

@MartinBaumgarter在我的'pom.xml'中加入我得到一个错误。用项目快照查看我的pom.xml [image](https://imgur.com/a/euvAv)。 – alhelal

+0

我想你应该删除只是一个占位符的3个点。 –

+0

@MartinBaumgarter是的,你是对的。 – alhelal

-1

你必须使用你的主类的全名:

<mainClass>org.jis.Main</mainClass> 
+0

虽然正确,但它需要在正确的Maven插件中才能正常工作 –

0

基本上Maven是一个框架,有Maven的插件的集合,为每一位为建立一个项目而采取的行动。

每个构建阶段是利用项目的描述项目对象模型对应的Maven的插件(POM)

所以Maven的编译器插件只是负责编制项目,它不会创建清单文件进行。

maven-jar-plugin负责创建项目的清单文件。

-1

如果您正在使用Spring Boot Application。在pom.xml中添加以下内容

  <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 

这将在MANIFEST.MF文件中添加Main-Class条目。

相关问题