IntelliJ Idea - 为项目生成JAR:不包含库

时间:2015-04-27 09:55:33

标签: java intellij-idea jar

我正在使用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中不存在。 enter image description here

2 个答案:

答案 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解决了这个问题(无论是那个问题还是它触发了项目的“深度清理”或其他有效修复问题的东西)

编辑:经过进一步的测试,结果证明JDK版本与它无关,我只是测试了各种各样的东西,我认为解决方案就是这样,但事实并非如此。显然,问题是IntelliJ没有“喜欢”我的库O.o的名字 我将其从delta.desktoptools.lib重命名为delta.desktoptools.library,现在它已被包含在内。很奇怪,但至少它有效。知道原因会很有趣。也许以.lib结尾的包会触发某种名称约定/保留规则?我对IntelliJ的熟悉程度不足以确定......