【发布时间】:2015-07-05 17:08:12
【问题描述】:
我正在使用 IntelliJ Idea (14.1.2) 开发一个简单的 java 命令行应用程序。
我的应用由两个模块组成:
- 只包含“主”类的主模块
- 一个库模块,其中包含“做事”的实际代码(该模块还包括并使用了一个 maven 库)
从 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 中没有。
【问题讨论】:
标签: java intellij-idea jar