0

更新: “找不到主类”原来是一个红鲱鱼:在public static void main(String[] args)我的类尝试从 JAR 中未包含的文件加载资源包之前的行中。未能加载此资源产生的报告导致我误入歧途:

Caused by: java.util.MissingResourceException: Can't find bundle for base name propFile, locale en_US
        at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:705)
        at com.foo.bar.MyApp(MyApp.java:103)
Could not find the main class: com.foo.bar.MyApp.  Program will exit.

我正在使用 Eclipse Juno 和 JDK 1.6_45(均为 32 位)在 Win 7 64 位上进行开发。我正在生成一个带有mvn clean install调用的可执行 JAR。

当我尝试启动应用程序时,我收到“找不到主类”或“无法加载主类清单属性”类似的地面已涵盖此处此处。我已经阅读了这些答案和基本的 maven 示例,但我仍然没有得到一个可执行的 JAR。

我尝试使用java -jar MyApp-jar-with-dependenciesjava -cp MyApp-jar-with-dependencies com.foo.bar.MyApp调用来执行应用程序

我发现特别令人困惑的是 MANIFEST.MF(在 JAR 中的 META-INF 中继续)专门列出了我的目标主类,并且 MyApp.class 文件存在于目录树中的正确位置(com\foo\bar\ MyApp.class)。

在开发过程中,我已经多次重构了我的包名和类名。此操作是否会导致一些引用/类路径打嗝?主类查找还会在哪里失败?

我的 pom.xml:

<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>

   <parent>
      [...]
   </parent>

   <groupId>com.foo.bar</groupId>
   <artifactId>MyApp</artifactId>
   <packaging>jar</packaging>
   <version>2.0.0.0-SNAPSHOT</version>
   <name>MY APP</name>

   <url>http://maven.apache.org</url>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <issues-product>APP</issues-product>
      <issues-component>MY_APP</issues-component>
   </properties>

   <dependencies>
    [...]
   </dependencies>

   <build>
      <finalName>${project.artifactId}</finalName>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
            <source>1.6</source>
            <target>1.6</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${maven.checkstyle.version}</version>
          <configuration>
            [...]
          </configuration>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>${maven.pmd.version}</version>
            <configuration>
                [...]
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven.javadoc.version}</version>
         </plugin>
        <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.2</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
                <addClasspath>true</addClasspath>
              <mainClass>com.foo.bar.MyApp</mainClass>
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      </plugins>
      <pluginManagement>
         [...]
      </pluginManagement>
   </build>

   <reporting>
      [...]
   </reporting>

   <scm>
      [...]
   </scm>
</project>

输出 JAR 中的我的 MANIFEST.MF:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: myname
Build-Jdk: 1.6.0_45
Main-Class: com.foo.bar.MyApp
4

1 回答 1

2

我不确定为什么你的不工作,这是我工作的 maven 项目的剪切粘贴。你应该只需com.pictureu.mains.MainGui要用你的主类替换来测试

        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
              <manifest>
                <mainClass>com.pictureu.mains.MainGui</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
        </plugin>
于 2013-08-19T19:09:47.317 回答