简体   繁体   English

我可以尝试/捕获此错误:“尝试打开jar时发生意外错误”

[英]Can I try/catch this error: “An unexpected error occurred while trying to open jar”

I am working on my first non-trivial Java app. 我正在开发我的第一个平凡的Java应用程序。 It was started by a co-worker, but she didn't have time to finish, so I took it over. 它是由一位同事开始的,但是她没有时间完成,所以我接管了。 I decided to use Buildr as my build tool: https://buildr.apache.org/ 我决定使用Buildr作为构建工具: https : //buildr.apache.org/

First, to start with empty target directories, I do: 首先,从空目标目录开始,我这样做:

buildr clean

Then I: 然后我:

buildr --verbose compile

which gives me: 这给了我:

(in /Users/cerhov/projects/openz/lofdg/buildr_fdg, development)
Compiling buildr_fdg
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company
cp /Users/cerhov/projects/openz/lofdg/buildr_fdg/src/main/resources/com/company/students.txt /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company/students.txt
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company
cp /Users/cerhov/projects/openz/lofdg/buildr_fdg/src/main/resources/com/company/scores.txt /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company/scores.txt
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company
cp /Users/cerhov/projects/openz/lofdg/buildr_fdg/src/main/resources/com/company/behavior.txt /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company/behavior.txt
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company
cp /Users/cerhov/projects/openz/lofdg/buildr_fdg/src/main/resources/com/company/schoolDates.txt /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company/schoolDates.txt
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company
cp /Users/cerhov/projects/openz/lofdg/buildr_fdg/src/main/resources/com/company/assignments.txt /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources/com/company/assignments.txt
touch /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/resources
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/classes
Compiling buildr_fdg into /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/classes
Note: /Users/cerhov/projects/openz/lofdg/buildr_fdg/src/main/java/com/company/Main.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
touch /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/classes
Completed in 0.926s

This gives me my ".class" files. 这给了我“ .class”文件。 Now I want to package this up as a jar, so I: 现在,我想把它包装成一个罐子,所以:

cerhov : 15:26:04 : ~/projects/openz/lofdg/buildr_fdg $ buildr --verbose package

which gives me: 这给了我:

(in /Users/cerhov/projects/openz/lofdg/buildr_fdg, development)
Building buildr_fdg
Packaging buildr_fdg
Packaging buildr_fdg-1.0.0.jar
rm /Users/cerhov/projects/openz/lofdg/buildr_fdg/target/buildr_fdg-1.0.0.jar
mkdir -p /Users/cerhov/projects/openz/lofdg/buildr_fdg/target
Running integration tests...
Completed in 0.212s

Then I do this: 然后我这样做:

cerhov : 15:26:56 : ~/projects/openz/lofdg/buildr_fdg $ ls target/

and I see a new Jar file has been created: 我看到已经创建了一个新的Jar文件:

buildr_fdg-1.0.0.jar    classes         resources

so I: 所以我:

java -jar target/buildr_fdg-1.0.0.jar 

but I get: 但我得到:

Error: An unexpected error occurred while trying to open file target/buildr_fdg-1.0.0.jar

I'd like to get more info so I wrapped my whole main() function in a big try/catch statement: 我想获取更多信息,所以我将整个main()函数包装在一个大型try / catch语句中:

public static void main(String[] args) {
try {
    // all my real code goes here, but I have deleted it for clarity
} catch (Exception e) {
    e.printStackTrace();
}
}

Then I re-compiled and re-packaged, but I still get the same error. 然后,我重新编译并重新打包,但是仍然出现相同的错误。 I am unclear how I can force the app to give me more info. 我不清楚如何强制该应用程序向我提供更多信息。

I wanted to see if my manifest.txt got into my jar, so I copied the jar to another folder, cd'ed to that folder, and: 我想看看是否我的manifest.txt进入了我的jar,所以我将jar复制到了另一个文件夹,并cd到了该文件夹,然后:

 jar xf buildr_fdg-1.0.0.jar     

and then this: 然后这个:

cat META-INF/MANIFEST.MF 

showed me: 给我看了:

Created-By: Buildr
: 
Manifest-Version: 1.0
Main-Class: com/company/Main

Which looks right. 看起来不错。 Maybe I can add in a classpath, though Buildr seems to have found all the files. 也许我可以添加一个类路径,尽管Buildr似乎已经找到了所有文件。

How do I force the app to give me more information about the problem? 如何强制该应用向我提供有关该问题的更多信息?

UPDATE: 更新:

I tried adding this line to the manifest: 我尝试将以下行添加到清单中:

Class-Path: /Users/cerhov/projects/launchopen/lofdg/buildr_fdg/src/main/java/com/company

Then I re-compiled and re-packaged. 然后我重新编译并重新打包。 But this: 但是这个:

java -cp buildr_fdg-1.0.0.jar com.company.Main

gave me: 给我:

Error: Could not find or load main class com.company.Main

So I tried every variation: 所以我尝试了所有变化:

/Users/cerhov/projects/launchopen/lofdg/buildr_fdg/src/main/java/com/

/Users/cerhov/projects/launchopen/lofdg/buildr_fdg/src/main/java/

/Users/cerhov/projects/launchopen/lofdg/buildr_fdg/src/main/

/Users/cerhov/projects/launchopen/lofdg/buildr_fdg/src/

/Users/cerhov/projects/launchopen/lofdg/buildr_fdg/

None of which work. 都不起作用。 Am I suppose to aim the classpath at the source directory or the target directory? 我是否应该将类路径瞄准源目录或目标目录?

Why is Buildr unable to manage this for me? 为什么Buildr无法为我管理此操作? It does find all of the files and it does bundle them all into the jar, so it knows where everything is. 它确实找到了所有文件,并将它们全部捆绑到了jar中,因此它知道所有内容在哪里。

I recreated the problem and was able to correct it by manually removing the colon (:) that appears by itself in the manifest file. 我重新创建了该问题,并能够通过手动删除清单文件中本身出现的冒号(:)来解决。 Don't know why buildr is putting it there. 不知道为什么buildr会把它放在那里。 This describes a way of possibly overriding the manifest file in buildr: https://buildr.apache.org/rdoc/Buildr/Packaging/Java/JarTask.html My reputation is too low to post a comment so unfortunately I can only post it as an answer. 这描述了一种可能覆盖构建器中清单文件的方法: https ://buildr.apache.org/rdoc/Buildr/Packaging/Java/JarTask.html我的声誉太低,无法发表评论,因此很遗憾,我只能发表它作为答案。 Hopefully this helps. 希望这会有所帮助。

It looks like there are a couple of problems with the manifest file. 清单文件似乎有几个问题。 One is that you have a stray ':' as mentioned by kharyam above and the other is that the Main-Class attribute is in incorrect format. 如上面的kharyam所述,一个是您有一个杂散的':',另一个是Main-Class属性的格式不正确。 It should look like the class name (ie "Main-Class: com.company.Main"). 它应该看起来像类名(即“ Main-Class:com.company.Main”)。 If you can post the part of the build file that defines the package we may be able to help further. 如果您可以发布构建文件中定义软件包的部分,我们可能会提供进一步的帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尝试打开罐子时发生意外错误 - An unexpected error occurred while trying to open jar 我收到一个错误:尝试打开文件 hola.jar 时发生意外错误 - I get an error: An unexpected error occurred while trying to open file hola.jar Bundle-NativeCode:MANIFEST文件中的标头给出“错误:尝试打开文件pr.jar时发生意外错误” - Bundle-NativeCode: header in MANIFEST file give “Error: An unexpected error occurred while trying to open file pr.jar” 尝试打开excel工作簿时发生错误,Try / Catch不会激活 - Try/Catch doesn't activate on an error trying to open excel Workbook 尝试对用户进行身份验证时发生内部错误 - An internal error occurred while trying to authenticate the user 尝试与sphero连接时发生错误 - An error occurred while trying to connect with the sphero 尝试在使用 try/catch 块时读取文件时出现未处理的异常错误 - Getting unhandled exception error when trying to read a file while using try/catch block 错误:执行jar文件时发生了JNI错误 - Error: A JNI error has occurred while executing jar file MYSQL&SQuirreL-尝试打开SQL连接时发生意外错误 - MYSQL & SQuirreL - Unexpected Error occurred attempting to open an SQL connection 尝试并捕获Java中的错误 - Try and Catch Error in Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM