Экспорт проекта apache grabe для NetBeans в файл JAR - PullRequest
0 голосов
/ 21 апреля 2020

Я создал проект 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'}

в мой файл , Это устраняет проблему запуска файла через командную строку. Запуск через java -jar теперь работает. Тем не менее, я все еще не могу запустить его через Finder на моей ма c. Он выдает ошибку, в которой говорится, что jar java не может быть запущен, и просит проверить консоль для более подробной информации. Я не могу понять, как решить проблему или почему я могу запустить ее через командную строку, но не через окно поиска. Я иду по пути 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'
    }

}

1 Ответ

0 голосов
/ 22 апреля 2020

Это сработало для меня:

  • Создать простое приложение Gradle с именем gradleproject2 с помощью мастера проектов Файл> Новый проект ...> Java с Gradle> Java Приложение .
  • Редактировать build.gradle на основе этого ответа SO , чтобы добавить следующую запись:
jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'hello.HelloWorld'
    )
  }
}
  • Затем замените hello.HelloWorld вашим пакетом и именем класса, содержащего main(), который в моем случае был 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 является изменение содержания MANIFEST.MF в файле jar с:

Manifest-Version: 1.0

... на это :

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

Наконец, запустите файл JAR из командной строки. В моем случае команда была просто java -jar gradleproject2.jar:

runJar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...