将 apache netbeans gradle 项目导出到 jar 文件

Exporting apache netbeans gradle project to jar file

我创建了一个 Netbeans Gradle 项目,我正在尝试找到将其导出到 .jar 文件的最佳方法,以便可以从 IDE 外部打开它。我在我的项目中使用依赖项,我收到了 java.lang.NoClassDefFoundError.

为了解决这个问题,我尝试添加

jar {
manifest {
    attributes "Main-Class": "CollegeCounselor.Main"
}

from{

    configurations.compile.collect{ it.isDirectory() ? it : zipTree(it)}

    }
}

到我的 build.gradle 文件。但是,这引发了 java.lang.SecurityException:清单主要属性的签名文件摘要无效。

为了解决这个问题,我找到了一个建议来添加

{exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'}

到我的文件。这解决了通过命令行 运行ning 文件的问题。 运行 它通过 java -jar 现在可以工作了。但是,我仍然无法通过 mac 上的取景器 运行 它。它给我一个错误,说 java jar 无法启动,并告诉我检查控制台以获取更多详细信息。我不明白如何解决这个问题,或者为什么我可以 运行 通过命令行而不是通过 finder window。我将转到 build/libs/file.jar 路径并尝试打开此文件。

如能提供有关导出此项目的最佳方式的任何帮助,我们将不胜感激。

这是我的完整 build.gradle 文件:

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'application'


mainClassName = 'CollegeCounselor.Main'

repositories {
    jcenter()
}



dependencies {
    testCompile 'junit:junit:4.12'
    compile('com.microsoft.graph:microsoft-graph:1.5.+')
    compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.4.0'
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'
}

jar {
    manifest {
        attributes "Main-Class": "CollegeCounselor.Main"
    }

    from { (configurations.runtime).collect { it.isDirectory() ? it : zipTree(it) } } 
{
        exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
    }

}

这对我有用:

  • 使用项目向导创建一个名为 gradleproject2 的简单 Gradle 应用程序 File > New Project... > Java with Gradle > Java申请.
  • 编辑 build.gradle ,以添加以下条目:
jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'hello.HelloWorld'
    )
  }
}
  • 然后将 hello.HelloWorld 替换为您的包和包含 main() 的 class 的名称,在我的例子中是 gradleproject2.Main,所以我修改了 build.gradle 看起来像这样:
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'application'


mainClassName = 'gradleproject2.Main'

repositories {
    jcenter()
}

dependencies {
    testImplementation     'junit:junit:4.13'
}

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'gradleproject2.Main'
    )
  }
}
  • 构建您的项目,将 jar 文件 gradleproject2.jar 放入 {project directory}\build\libs

改成build.gradle的效果是改变jar内MANIFEST.MF的内容文件来自:

Manifest-Version: 1.0

...为此:

Manifest-Version: 1.0
Class-Path:
Main-Class: gradleproject2.Main

最后,运行 来自命令行的 jar 文件。在我的例子中,命令只是 java -jar gradleproject2.jar: