[英]Maven adding mainClass in pom.xml with the right folder path
我想用我的 Maven 項目獲取一個工作 jar 文件。
構建部分是:
<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 中,然后再到我的 jar 文件中。 文件夾結構是:src/main/java/org/jis/Main.java 但如果我添加以下行
<mainClass>src.main.java.org.jis.Main</mainClass>
它不起作用。
提前致謝
首先,您的主類不包括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>
如果它是 Spring Boot 應用程序,您可以在下面提及。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.test.MainClass</mainClass>
</configuration>
</plugin>
</plugins>
</build>
基本上,Maven 是一個框架,它為構建項目而執行的每個操作都有一組 maven-plugin。
每個構建階段都由相應的 maven-plugin 使用項目的描述項目對象模型(POM)執行
所以 maven-compiler 插件只負責編譯項目,它不會創建清單文件。
maven-jar-plugin 負責創建項目的清單文件。
您必須使用主類的完全限定名稱:
<mainClass>org.jis.Main</mainClass>
問題似乎已經過去了一段時間,但我將分享我為未來閱讀而達成的解決方案。
我在 IntellJ IDE 中使用 Maven 項目。 即使使用從操作系統復制的完整路徑,如:C:\\Users\\Rogerio\\Desktop\\Script\\src\\main\\java\\Controller\\MainClass.java,有或沒有 .java 甚至嘗試 com.src ...在為我的應用程序創建 jar 文件時找不到主類。
解決方案是將 CDATA 標簽放在 maven-jar 插件的 mainClass 標簽中,如下所示:
我的文件結構:
[IntelliJ 上的目錄圖像結構][1] [1]:https://i.stack.imgur.com/LHCWc.jpg
在 pom.xml 上我的 maven-jar 插件中:
`<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass><![CDATA[Controller.MainClass]]></mainClass>
</manifest>
</archive>
</configuration>
`
只是把這個留在這里給那些像我試圖讓一個非常簡單的例子工作一樣沮喪的人。
我遇到的問題是 maven jar 歸檔器緩存了一些錯誤的信息,所以如果你給它合適的主類(或者在我的情況下,你實際上不需要使用合適的 maven 版本和設置來做)。
如果您使用 IntelliJ 並且有一個,請嘗試清除“目標”目錄。 例如,“目標”目錄是一個 maven 默認放置 jar。
如果您使用的是 Spring Boot 應用程序。 在 pom.xml 中添加以下內容
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
這將在 MANIFEST.MF 文件中添加 Main-Class 條目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.