清单文件不是 regarded/working

Manifest file not regarded/working

这让我发疯了,我对所有这些行家绒毛几乎没有经验。一开始我已经让它工作了,使用我当前的清单文件。

Manifest-Version: 1.0
Class-Path: /Users/avalin/.m2/repository/org/slf4j/slf4jnop/1.7.25/slf4j-nop-1.7.25.jar 
        /Users/avalin/.m2/repository/org/drools/drools-compiler/7.3.0.Final/drools-compiler-7.3.0.Final.jar 
        /Users/avalin/.m2/repository/org/drools/drools-core/7.3.0.Final/drools-core-7.3.0.Final.jar 
        /Users/avalin/.m2/repository/org/kie/kie-api/7.3.0.Final/kie-api-7.3.0.Final.jar 
        /Users/avalin/.m2/repository/org/kie/kie-internal/7.3.0.Final/kie-internal-7.3.0.Final.jar
Main-Class: org.avalin.optaplanner.main.EmployeeRoster

清单应正确放置在我的 resources/META-INF 文件夹中, 尽管 IntelliJ "cleverly" 足以尝试将其放入 java-文件夹而不是

但是现在我突然得到这个错误:

Exception in thread "main" java.lang.NullPointerException
    at org.kie.internal.io.ResourceFactory.newByteArrayResource(ResourceFactory.java:66)
    at org.drools.compiler.kie.builder.impl.AbstractKieModule.getResource(AbstractKieModule.java:299)
    at org.drools.compiler.kie.builder.impl.AbstractKieModule.addResourceToCompiler(AbstractKieModule.java:264)
    at org.drools.compiler.kie.builder.impl.AbstractKieModule.addResourceToCompiler(AbstractKieModule.java:259)
    at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:228)
    at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:74)
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:251)
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:219)
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:177)
    at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:503)
    at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:331)
    at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:220)
    at org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61)
    at org.avalin.optaplanner.main.EmployeeRoster.main(EmployeeRoster.java:31)
Avalins-MacBook-Pro:~ avalin$

我的 pom 中有这个:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>org.avalin.optaplanner.main.EmployeeRoster</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

但它似乎对任何事情都没有影响...... 我需要更改我的清单文件,所以 "users/avalin" 不存在,但它在另一台计算机上生成的方式不同,因为它们显然不会有相同的路径......首先让它工作可能是一个很好的开始

所以我最终 "fixing" 它,通过修复它,我的意思是制定一个解决方法。 首先,intelliJ 的 "funky" 构建 jar 的方式必须完成,不是从看起来合乎逻辑的构建工件,不,而是从右下角打开 "Maven Projects" 选项卡

之后,pom 中的所有内容开始生效,我可以制作一个 使用 pom 将所有依赖项分开的文件夹 (libs),并让 maven-jar-plugin 使用 libs

从该文件夹 (libs) 中获取这些依赖项

这是我添加的:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            ${project.build.directory}/libs
                        </outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>libs/</classpathPrefix>
                        <mainClass>
                            org.avalin.optaplanner.main.EmployeeRoster
                        </mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

现在我的项目也可以在不同的计算机上使用,因为有 libs 文件夹。 .jar 文件最终位于项目

内的 "target" 文件夹中

希望这对外面的人有所帮助,因为要找到关于这个主题的详细记录 material 似乎几乎不可能,否则我可能不擅长谷歌搜索。不管怎样。