2

With all the help from you i was able to finish my first project in java. Now i want to create a jar and run the application (Java project - it is a plain console application which is having another project(console application) as a dependence) from jar.

I created a jar with eclipse by right click - export - created a jar. When i try to run this jar from my cmd, I have an error (below is the error I am geting)

no main manifest attribute, in AAA.jar

I Googled the error - most of them subjected to create the Manifest file. I created a manifest file like below in the project equal to src level

Manifest-Version: 1.0
Main-Class: com.Pacakename.mainclass
Class-Path: log4j-1.2.16.jar db2jcc.jar db2jcc_license_cu.jar

Then J tried run the jar again but this time it says no main method where i have a main method in the class

Please some one please explain a clear step's for creating the Manifest(it really help's me if you show me the folder structure of the place where we have Manifest file)

4

3 回答 3

4

假设您具有以下目录结构:

MyJavaProject
   |-src 
      |- com
          |- example
               |- Main.java

要在 cmd 行中编译此类项目,(无外部依赖项)您需要调用命令

$ cd MyJavaProject
$ mkdir bin         //to separate *.class file from source files
$ javac -d bin src\com\example\Main.java

这将在目录中创建Main.class文件。bin要将其打包为 *.jar 文件,您可以: 1) 使用二进制文件创建 jar 并在 cmd 中指定 Main 类 2) 创建 Manifes 并将其嵌入到 jar 中(我将重点关注这一点)

您应该在其META-INF下创建目录src并在其中创建MANIFEST.mf文件

您的清单应如下所示:

Manifest-Version: 1.0
Created-By: <Your info>
Main-Class: com.example.Main

记得在 Manifest 的末尾添加空行!!

在这种情况下,您指定要在属性中运行的主类的Manifest-Version属性、Created-By属性和完全限定名Main-Class

要使用此 Manifest 文件和二进制文件创建 Jar,请调用命令

$ cd bin
$ jar cfm MyJavaProject.jar ..\src\META-INF\MANIFEST.MF .

这将创建一个名为MyJavaProject.jar并使用您的清单的新 jar

如果您的项目依赖于外部类或 jar,请在编译时将它们添加到您的类路径(-cp选项)并在Manifest

ClassPath: path/to/dependent/jars/jar.jar

重新编译它并创建新的 jar 并享受你的 Java 任务:)

有关清单的更多信息,请参阅:文档

PS:使用 jars,amnifest from cmd line 可能看起来很难看,但它可以教你一些类似于 ava 的概念。如果您想跳过它,请考虑使用Apache MavenApache Ant

于 2013-06-13T21:37:44.437 回答
1

如果您使用的是maven,我可以建议您使用shade 插件来生成具有所有依赖项(和清单:-))的可运行 jar 。

将其包含在您的pom.xml中:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <!-- your main class: -->
                  <mainClass>org.sonatype.haven.HavenCli</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

然后执行mvn clean package shade:shade以构建一个 jar,您可以使用java -jar jarfilename.jar.

于 2013-06-13T21:08:05.410 回答
0

如果您使用的是 eclipse,您可以使用“导出”-> Runnable jar 来实现您的目标。在这种情况下,您的项目应该有一个有效的运行配置,因为 eclipse 使用这个运行配置作为可运行 jar 的一种蓝图。

在这种情况下,eclipse 将为您构建清单。

于 2013-06-13T20:43:21.310 回答