java - 我可以尝试/捕获此错误 : "An unexpected error occurred while trying to open jar"

标签 java jar buildr

我正在开发我的第一个重要的 Java 应用程序。这是一个同事发起的,但她没有时间完成,所以我接手了。我决定使用 Buildr 作为我的构建工具:https://buildr.apache.org/

首先,从空目标目录开始,我这样做:

buildr clean

然后我:

buildr --verbose compile

这给了我:

(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

这给了我我的“.class”文件。现在我想将其打包为 jar,所以我:

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

这给了我:

(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

然后我这样做:

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

我看到一个新的 Jar 文件已创建:

buildr_fdg-1.0.0.jar    classes         resources

所以我:

java -jar target/buildr_fdg-1.0.0.jar 

但我得到:

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

我想获得更多信息,因此我将整个 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();
}
}

然后我重新编译并重新打包,但仍然出现同样的错误。我不清楚如何强制该应用程序向我提供更多信息。

我想看看我的manifest.txt是否进入了我的jar,所以我将jar复制到另一个文件夹,cd到该文件夹​​,然后:

 jar xf buildr_fdg-1.0.0.jar     

然后是这个:

cat META-INF/MANIFEST.MF 

向我展示:

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

看起来不错。也许我可以添加一个类路径,尽管 Buildr 似乎已经找到了所有文件。

如何强制应用程序向我提供有关该问题的更多信息?

更新:

我尝试将此行添加到 list 中:

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

然后我重新编译并重新打包。但这:

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

给了我:

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

所以我尝试了每种变体:

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

这些都不起作用。我应该将类路径瞄准源目录还是目标目录?

为什么 Builder 无法为我管理这个?它确实找到了所有文件,并将它们全部捆绑到 jar 中,因此它知道所有文件在哪里。

最佳答案

我重新创建了该问题,并能够通过手动删除 list 文件中单独出现的冒号 (:) 来纠正该问题。不知道为什么 build 者把它放在那里。这描述了一种可能覆盖构建器中 list 文件的方法:https://buildr.apache.org/rdoc/Buildr/Packaging/Java/JarTask.html我的声誉太低,无法发表评论,所以不幸的是我只能将其作为答案发布。希望这会有所帮助。

关于java - 我可以尝试/捕获此错误 : "An unexpected error occurred while trying to open jar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854679/

相关文章:

java - Spring JSP : Trouble with spring form with modelAttribute ="" and path =""

java - 运行 Ant 的 jar 任务时如何挑选包?

Android Studio 构建 2 个包含相同包的依赖项

testing - 如何让 buildr 对 jar 而不是类进行测试?

java - Jenkins/Buildr 运行 eclipse 编译器为 'javac',无需更改系统 java

java - 将类路径传递给 buildr 中基于 java/scala 的项目中的自定义任务

java - Intellij IDEA 和 Gradle 项目

JAVA_HOME "bug"

java - hibernate-commons-annotations-4.0.1.Final.jar;无效的 LOC header (错误的签名)?

java - 我如何用 jre 编译 .jar?