标签: jar

无法使用 jar 命令构建 - java.io.IOException: 行太长

我有看起来像这样的文件夹:

foo/
 Bar.java
 Bar.class
 Foo.java
 Foo.class
 manifest.mf
Run Code Online (Sandbox Code Playgroud)

.java 文件都在一个名为 x 的包中:

package x;
Run Code Online (Sandbox Code Playgroud)

我生成 .class 文件:

javac foo/*.java
Run Code Online (Sandbox Code Playgroud)

然后我尝试打包为可运行的 jar 格式:

jar cmf foo.jar foo/manifest.mf foo/*.class
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

 java.io.IOException: line too long
        at java.base/java.util.jar.Attributes.read(Attributes.java:381)
        at java.base/java.util.jar.Manifest.read(Manifest.java:228)
        at java.base/java.util.jar.Manifest.<init>(Manifest.java:80)
        at java.base/java.util.jar.Manifest.<init>(Manifest.java:72)
        at jdk.jartool/sun.tools.jar.Main.run(Main.java:264)
        at jdk.jartool/sun.tools.jar.Main.main(Main.java:1669)
Run Code Online (Sandbox Code Playgroud)

manifest.mf 的内容只是:

Main-Class: x.Bar
Run Code Online (Sandbox Code Playgroud)

它编译时javac不确定发生了什么,或者为什么它不喜欢清单文件,有人知道吗?

java jar executable-jar runnable-jar

1
推荐指数
1
解决办法
473
查看次数

Gradle 实现与 jar 任务中的编译

我可以成功地使用Gradle编译胖 JAR,但是在最近从“编译”依赖项规范切换到“实现/api”规范后运行 JAR 时遇到问题。我已经确定问题仅发生在以下两种情况之一。应用程序在 IntelliJ 中的任一情况下运行。

第一/问题:

dependencies {implementation 'no.tornado:tornadofx:1.7.18'}
Run Code Online (Sandbox Code Playgroud)

第二/作品:

dependencies {compile'no.tornado:tornadofx:1.7.18'}
Run Code Online (Sandbox Code Playgroud)

JAR 在这两种情况下都会编译。当我尝试在命令行上启动第一个案例 JAR 时出现问题,并引发以下错误。

C:\aaa_eric\code\testr\mic\build\libs>java -jar mic-1.0-snapshot.jar 错误:无法找到或加载主类 app.MyApp 引起:java.lang.NoClassDefFoundError:tornadofx/App

这是 build.gradle 中的 JAR 任务。tornadofx 依赖项是否可能在编译时可用,但在运行时不可用?谢谢你的帮助。

jar {
  manifest {
    attributes 'Main-Class': 'app.MyApp'
  }
  from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
Run Code Online (Sandbox Code Playgroud)

jar executable-jar build.gradle

1
推荐指数
1
解决办法
1812
查看次数

创建了 Spring Boot Jar。运行但失败`DataSourceProperties$DataSourceBeanCreationException:无法确定合适的驱动程序类`IntelliJ


该问题已被编辑,请提前查看更新部分以及我处理它以找到解决方案的所有不同方式。


初始问题

我试图为我的项目创建一个可执行的 jar 文件,但在尝试运行它时遇到了错误no main manifest attribute, in kerkinibackend.jar

该项目是一个 Spring Boot 应用程序,我使用 IntelliJ 作为 IDE。

我试图从类似的问题中找到最常见的情况,但我无法让它发挥作用。

我采取的步骤是:

  1. 打开 IntelliJ。
  2. 在右上角的图标上打开项目的结构。
  3. 导航到 Artifact。
  4. 按加号添加新神器。
  5. JAR -> 来自具有依赖项的模块。(在有一个 MANIFEST.MF 文件时也尝试使用空白选项,该文件是我第一次尝试时自动生成的)。
  6. 在弹出对话框中打开 Main 类的文件夹并指定它。(当我在某处阅读时,也尝试将 Main 类留空,并通过 Manifest 将其与其连接)。
  7. 其余为默认。(这样 IntelliJ 还会创建所需的清单,以防您已经删除文件将允许再次生成它)
  8. 然后,我按 Build -> Build Artifacts -> Build。
  9. 创建的大小为 57Mbs。我尝试将它作为可执行文件运行,但我发现它不起作用。然后我打开cmd并运行java -jar kerkinibackend.jar,然后出现错误消息。问题是该MANIFEST.MF文件实际上是在src/main/java/META-INF
Manifest-Version: 1.0
Main-Class: com.teicm.kerkinibackend.KerkinibackendApplication

Run Code Online (Sandbox Code Playgroud)

我在 pom.xml 中也确实有所需的依赖项

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
Run Code Online (Sandbox Code Playgroud)





更新

我通过将清单的默认生成更改为资源中来解决该问题。

现在 Jar 运行了,但是我从 Spring 中得到并出错 …

java jar intellij-idea maven spring-boot

1
推荐指数
1
解决办法
1140
查看次数

java.lang.NoClassDefFoundError: io/restassured/path/json/mapper/factory/JsonbObjectMapperFactory

使用放心的 jar 发出 GET api 请求时,我的程序在作为 TestNg 运行时抛出以下错误

输出:

java.lang.NoClassDefFoundError: io/restassured/path/json/mapper/factory/JsonbObjectMapperFactory
    at io.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41)
    at io.restassured.RestAssured.<clinit>(RestAssured.java:421)
    at SimpleGetTest.GetWeatherDetails(SimpleGetTest.java:13)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.ClassNotFoundException: io.restassured.path.json.mapper.factory.JsonbObjectMapperFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown …
Run Code Online (Sandbox Code Playgroud)

java testng jar rest-assured web-api-testing

1
推荐指数
1
解决办法
2930
查看次数

如何传递&amp;传入java jar参数?

当我"&"用作参数时,命令行将 & 视为新命令的开头,但 & 是我的参数的一部分。例如-如果我运行java -jar Runner.jar ABC&DEF.

我想要参数值,"ABC&DEF"但我收到如下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
        at Runner.main(Runner.java:11)
Run Code Online (Sandbox Code Playgroud)

'DEF' 不是内部或外部命令,也不是可运行的程序或批处理文件。

java parameters jar

1
推荐指数
1
解决办法
45
查看次数

如何更新预先存在的Jar文件

我有一个WAR文件,我需要添加两个文件.目前,我这样做:

File war = new File(DIRECTORY, "server.war");
JarOutputStream zos = new JarOutputStream(new BufferedOutputStream(new FileOutputStream(war)));

//Add file 1
File file = new File(DIRECTORY, "file1.jar");
InputStream is = new BufferedInputStream(new FileInputStream(file));
ZipEntry e = new ZipEntry("file1.jar");
zos.putNextEntry(e);
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf, 0, buf.length)) != -1) {
    zos.write(buf, 0, len);
}
is.close();
zos.closeEntry();

//repeat for file 2

zos.close();
Run Code Online (Sandbox Code Playgroud)

结果是前面的内容被破坏了:WAR只有我刚刚添加的2个文件.是否有某种追加模式,我没有使用或什么?

java jar

0
推荐指数
1
解决办法
2577
查看次数

无法使类路径正确

我正在尝试编译这个 slick2d示例(第一个),但我无法让它工作.这是代码:

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
/**
 * @author panos
 */
public class WizardGame extends BasicGame
{
    public WizardGame()
    {
        super("Wizard game");
    }

    public static void main(String[] arguments)
    {
        try
        {
            AppGameContainer app = new AppGameContainer(new WizardGame());
            app.setDisplayMode(500, 400, false);
            app.start();
        }
        catch (SlickException e)
        {
            e.printStackTrace();
        }
    }

    @Override
    public void init(GameContainer container) throws SlickException
    {
    }

    @Override
    public void update(GameContainer container, int delta) throws SlickException
    {
    }

    public void render(GameContainer container, …
Run Code Online (Sandbox Code Playgroud)

java jar classpath

0
推荐指数
1
解决办法
2680
查看次数

无法在Windows上运行我的jar文件

我有这些文件board.classx4.class(x4.class有main()方法).

我写道,要包装这些文件

jar cf x4.jar *.class
Run Code Online (Sandbox Code Playgroud)

并得到一个x4.jar文件.

我将这个x4.jar文件复制到我的桌面(在Windows Vista上)并双击它.我收到此错误:

无法加载Main-Class清单属性 C:\Users\eSKay\Desktop\x4.jar

我该怎么做才能使这个文件作为jar可执行文件运行(不安装任何软件)?


更新: 我使用清单文件来解决问题.我有我需要的jar文件,如果你这样做,它运行正常:

java -jar x4.jar
Run Code Online (Sandbox Code Playgroud)

但是,当我双击x4.jar没有任何反应时,我检查了任务管理器,发现javaw.exe正在后台启动,但它没有显示原始程序给出的输出.

问题是什么?

java windows executable jar manifest

0
推荐指数
1
解决办法
2856
查看次数

创建jar文件

可以有人解释我如何创建jar文件.我的源文件夹有各种子文件夹和图像文件.你可以从以下网址http://img63.imageshack.us/gal.php?g=capturev.png看到解释源文件夹结构的图片 .当使用eclipse export jar函数创建jar时,它只包含类文件,但我想为源文件夹中的所有内容创建jar文件.第三张图片显示了jar创建时获得的窗口.它没有其他文件夹和图像可供选择.

java eclipse jar

0
推荐指数
1
解决办法
3481
查看次数

我应该如何使用jar文件?

我有一个jar文件,其中包含一些我想在项目中使用的类.我在命令行工作而不是在eclipse中工作.

请告诉我如何在我的项目的jar文件中使用这些类.

java jar class

0
推荐指数
1
解决办法
296
查看次数