我正在使用IntelliJ Idea(14.1.2)开发一个简单的java命令行应用程序。
我的应用程序由两个模块组成:
从IntelliJ中调试时一切正常,但现在我想构建一个JAR文件,以便在IDE之外使用该工具。 因此,正如IntelliJ文档所建议的那样,我使用“Artifacts”菜单来设置在构建时生成的JAR工件。
JAR 似乎正确构建,但事实并非如此。问题是:我的库模块中的代码不包含在jar中,只有主模块的代码是!事实上,最奇怪的是,我的库模块包含的maven库中的代码是包含在jar中,而不是我的模块库本身的代码! 这显然意味着一旦主程序尝试使用库模块中的类,最终的jar就会抛出一个ClassNotFound异常。
我不知道我做错了什么,依赖项都设置了,在Artifact创建菜单中我告诉它在jar中包含依赖项......
编辑:这是IntelliJ创建的脚本,所有内容都按顺序显示:
<component name="ArtifactManager">
<artifact type="jar" build-on-make="true" name="delta.desktoptools.manifestgenerator:jar">
<output-path>$PROJECT_DIR$/out/artifacts</output-path>
<root id="archive" name="delta.desktoptools.manifestgenerator.jar">
<element id="module-output" name="delta.desktoptools.manifestgenerator" />
<element id="module-output" name="delta.desktoptools.lib" /> <!-- This doesn't get included :( -->
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/javaparser/javaparser-core/2.0.0/javaparser-core-2.0.0.jar" path-in-jar="/" />
</root>
</artifact>
</component>
编辑:我的工件配置屏幕,为了更清晰。正如您所看到的,我的库模块的编译输出包含在工件中,但最终的JAR中不存在。
答案 0 :(得分:0)
你使用intellij制作Jar还是依赖maven任务?
如果您依赖于pom,则需要在此处详细说明添加具有依赖项内容的构建 How can I create an executable JAR with dependencies using Maven?
答案 1 :(得分:0)
好的,我解决了。
我使用的是JDK 1.7.x,IntelliJ Artifacts创建者必须与它有一些不兼容/错误(很奇怪,因为我很确定Artifacts生成器在JDK 1.7之前已经相当多了,但无论如何)。
切换到JDK 1.8.x解决了这个问题(无论是那个问题还是它触发了项目的“深度清理”或其他有效修复问题的东西)
delta.desktoptools.lib
重命名为delta.desktoptools.library
,现在它已被包含在内。很奇怪,但至少它有效。知道原因会很有趣。也许以.lib结尾的包会触发某种名称约定/保留规则?我对IntelliJ的熟悉程度不足以确定......