Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntelliJ Idea-为项目生成JAR:不包括库_Java_Intellij Idea_Jar - Fatal编程技术网

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

Java IntelliJ Idea-为项目生成JAR:不包括库,java,intellij-idea,jar,Java,Intellij Idea,Jar,我正在使用IntelliJ Idea(14.1.2)开发一个简单的java命令行应用程序 我的应用程序由两个模块组成: 仅包含“main”类的主模块 一个库模块,其中包含“做事情”的实际代码(此模块还包括并使用maven库) 从IntelliJ内部进行调试时,一切都正常工作,但现在我想构建一个JAR文件,以便在IDE外部使用该工具。 因此,正如IntelliJ文档所建议的,我使用“Artifacts”菜单设置要在构建时生成的JAR工件 JAR似乎构建正确,但它没有。问题是:jar中不包含来自

我正在使用IntelliJ Idea(14.1.2)开发一个简单的java命令行应用程序

我的应用程序由两个模块组成:

  • 仅包含“main”类的主模块
  • 一个库模块,其中包含“做事情”的实际代码(此模块还包括并使用maven库)
从IntelliJ内部进行调试时,一切都正常工作,但现在我想构建一个JAR文件,以便在IDE外部使用该工具。 因此,正如IntelliJ文档所建议的,我使用“Artifacts”菜单设置要在构建时生成的JAR工件

JAR似乎构建正确,但它没有。问题是:jar中不包含来自我的库模块的代码,只包含来自主模块的代码!事实上,最奇怪的是,我的库模块包含的maven库中的代码包含在jar中,而不是我的模块库本身的代码! 这显然意味着,一旦主程序尝试使用库模块中的类,最终的jar就会抛出ClassNotFound异常

我不知道我做错了什么,依赖项都设置好了,在工件创建菜单中,我告诉它在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>

$PROJECT\u DIR$/out/artifacts
编辑:我的工件配置的屏幕,为了更清晰。正如您所看到的,我的库模块的编译输出包含在工件中,但在最终的JAR中不存在。

您是使用intellij制作Jar还是依赖maven任务

如果您依赖于pom,那么您需要添加包含依赖项的构建内容,如下所述 好的,我解决了

我使用的是JDK1.7.x,IntelliJ工件生成器肯定与它有一些不兼容/bug(奇怪,因为我很确定工件生成器比JDK1.7早了很多,但不管怎样)

切换到JDK1.8.x解决了这个问题(或者它触发了项目的“深度清理”,或者某种有效地解决了这个问题的东西)

编辑:进一步测试后,发现JDK版本与此无关,我只是测试了各种东西,我认为解决方案就是这样,但事实并非如此。显然,问题是IntelliJ不“喜欢”我的图书馆O.O.的名字
我将它从
delta.desktoptools.lib
重命名为
delta.desktoptools.library
,现在它被包括在内。很奇怪,但至少它起作用了。我想知道原因。也许以.lib结尾的包会触发某种名称约定/保留规则?我对IntelliJ不太熟悉,无法确定……

我正在使用IntelliJ本身。老实说,我从未使用过maven,是否需要正确地使用它?IntelliJ中包含的工件功能是否有缺陷/不完整?我读过的所有文档似乎都建议IntelliJ应该包含所需的依赖项。。。但事实并非如此:(我认为IntelliJ将只添加项目中包含的依赖项,如果不添加,您将在“available Elements”面板中提供这些依赖项,因此您所需要做的就是将其拖动到左侧,以便将其包含在工件中(在本例中为JAR文件)我做了…我添加了一个截图和IntelliJ生成的脚本…对我来说它看起来是正确的:/@kuporific:你必须等待24小时才能接受你自己的答案…PS:我看到你对IntelliJ的问题非常积极,有什么线索可以解释为什么会发生这种情况吗?即使我解决了它,我也不知道确切的原因:D