Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 Optaplanner-创建jar文件时出现NullPointerException_Java_Jar_Nullpointerexception_Optaplanner - Fatal编程技术网

Java Optaplanner-创建jar文件时出现NullPointerException

Java Optaplanner-创建jar文件时出现NullPointerException,java,jar,nullpointerexception,optaplanner,Java,Jar,Nullpointerexception,Optaplanner,我的程序在IDE(IntelliJ)中运行良好,但由于某些原因,当我尝试创建jar文件时,当我从终端运行程序时,会出现以下错误: 位于org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory的线程“main”java.lang.NullPointerException中出现异常(ScoreDirectorFactoryConfig.java:461)

我的程序在IDE(IntelliJ)中运行良好,但由于某些原因,当我尝试创建jar文件时,当我从终端运行程序时,会出现以下错误:

位于org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory的线程“main”java.lang.NullPointerException中出现异常(ScoreDirectorFactoryConfig.java:461)

org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:331)

org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:220)

org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:57)

org.optaplanner.EmployeeRoster.main(EmployeeRoster.java:31)

这是我在EmployeeRoster中的第31行:

Solver solver = SolverFactory.createFromXmlResource(SOLVER_CONFIG_XML).buildSolver();
SOLVER_CONFIG_XML是一个字符串,包含我的XML SOLVER CONFIG的路径, 看起来像这样


org.optaplanner.solver.floster
org.optaplanner.domain.Assignment
org/optaplanner/solver/employeeShiftsScoreRules.drl
5.
0硬/中/软
7.
1000

对我来说,问题是如何运行jar(java-jar),以及如何构建jar。当我从6.4.0升级到optaplanner core/7.4.1时,出现了NullPointerException。当我还在使用6.4.0时,这个问题没有出现

例外情况:

java.lang.NullPointerException 位于org.kie.internal.io.ResourceFactory.newByteArrayResource(ResourceFactory.java:66) 位于org.drools.compiler.kie.builder.impl.AbstractKieModule.getResource(AbstractKieModule.java:299) 位于org.drools.compiler.kie.builder.impl.AbstractKieModule.addResourceToCompiler(AbstractKieModule.java:264) 位于org.drools.compiler.kie.builder.impl.AbstractKieModule.addResourceToCompiler(AbstractKieModule.java:259) 位于org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:243) 位于org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:74) 位于org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:250) 位于org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:218) 位于org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:176) 位于org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:503)

下面是一个临时解决方案我解决了NullPointerException问题,只是让应用程序运行

  • 使用IntelliJ的gradle构建一个包含所有依赖项的大jar
  • 例如,将jar解压到unzippedJar/目录
  • 修改解压jar/META-INF/kie.conf
  • 重新压缩文件
  • 用java运行jar
  • 第一步。建造罐子 第二步。解压
    解压fatJar.jar-d解压jar/

    第三步。修改kie.conf “fatJar”任务将依赖项展平-jar中允许重复的文件名。这导致了四个解压缩jar/META-INF/kie.conf文件,其中只有一个被使用。无论使用哪个kie.conf文件,这都是我的最终kie.conf文件

        org.kie.api.internal.assembler.KieAssemblers = +org.optaplanner.core.impl.solver.kie.KieSolverAssemblerService
        org.kie.api.internal.assembler.KieAssemblers = org.kie.internal.services.KieAssemblersImpl
        org.kie.api.internal.runtime.KieRuntimes = org.kie.internal.services.KieRuntimesImpl
        org.kie.api.internal.weaver.KieWeavers = org.kie.internal.services.KieWeaversImpl
        org.kie.api.internal.runtime.beliefs.KieBeliefs = org.kie.internal.services.KieBeliefsImpl
        org.kie.api.io.KieResources = org.drools.core.io.impl.ResourceFactoryServiceImpl
        org.kie.api.marshalling.KieMarshallers = org.drools.core.marshalling.impl.MarshallerProviderImpl
        org.kie.api.concurrent.KieExecutors = org.drools.core.concurrent.ExecutorProviderImpl
        org.kie.api.KieServices = org.drools.compiler.kie.builder.impl.KieServicesImpl
        org.kie.internal.builder.KnowledgeBuilderFactoryService = org.drools.compiler.builder.impl.KnowledgeBuilderFactoryServiceImpl
    
    第四步。雷贾尔 不管出于什么原因,指定MANIFEST.MF文件对我没有任何帮助,因此我忽略了它

    jar cf rejard.jar.

    第五步。打开罐子
    java-cp rejard.jar path.to.class.with.main.method

    对于我来说,问题必须解决我想要如何运行jar(java-jar),以及如何构建jar。当我从6.4.0升级到optaplanner core/7.4.1时,出现了NullPointerException。当我还在使用6.4.0时,这个问题没有出现

    例外情况:

    java.lang.NullPointerException 位于org.kie.internal.io.ResourceFactory.newByteArrayResource(ResourceFactory.java:66) 位于org.drools.compiler.kie.builder.impl.AbstractKieModule.getResource(AbstractKieModule.java:299) 位于org.drools.compiler.kie.builder.impl.AbstractKieModule.addResourceToCompiler(AbstractKieModule.java:264) 位于org.drools.compiler.kie.builder.impl.AbstractKieModule.addResourceToCompiler(AbstractKieModule.java:259) 位于org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:243) 位于org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:74) 位于org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:250) 位于org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:218) 位于org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:176) 位于org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:503)

    下面是一个临时解决方案我解决了NullPointerException问题,只是让应用程序运行

  • 使用IntelliJ的gradle构建一个包含所有依赖项的大jar
  • 例如,将jar解压到unzippedJar/目录
  • 修改解压jar/META-INF/kie.conf
  • 重新压缩文件
  • 用java运行jar
  • 第一步。建造罐子 第二步。解压
    解压fatJar.jar-d解压jar/

    第三步。修改kie.conf “fatJar”任务将依赖项展平-jar中允许重复的文件名。这导致了四个解压缩jar/META-INF/kie.conf文件,其中只有一个被使用。无论使用哪个kie.conf文件,这都是我的最终kie.conf文件

        org.kie.api.internal.assembler.KieAssemblers = +org.optaplanner.core.impl.solver.kie.KieSolverAssemblerService
        org.kie.api.internal.assembler.KieAssemblers = org.kie.internal.services.KieAssemblersImpl
        org.kie.api.internal.runtime.KieRuntimes = org.kie.internal.services.KieRuntimesImpl
        org.kie.api.internal.weaver.KieWeavers = org.kie.internal.services.KieWeaversImpl
        org.kie.api.internal.runtime.beliefs.KieBeliefs = org.kie.internal.services.KieBeliefsImpl
        org.kie.api.io.KieResources = org.drools.core.io.impl.ResourceFactoryServiceImpl
        org.kie.api.marshalling.KieMarshallers = org.drools.core.marshalling.impl.MarshallerProviderImpl
        org.kie.api.concurrent.KieExecutors = org.drools.core.concurrent.ExecutorProviderImpl
        org.kie.api.KieServices = org.drools.compiler.kie.builder.impl.KieServicesImpl
        org.kie.internal.builder.KnowledgeBuilderFactoryService = org.drools.compiler.builder.impl.KnowledgeBuilderFactoryServiceImpl
    
    第四步。雷贾尔 无论如何
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!-- ... -->
        <build>
            <plugins>
                <!-- ... -->
    
                <!-- fat jar -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <descriptors>
                            <descriptor>src/assembly/distribution.xml</descriptor>
                        </descriptors>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <mainClass>com.veryseriouscompany.veryseriousproject.app.Main</mainClass>
                            </manifest>
                        </archive>
    
                    </configuration>
                    <executions>
                        <execution>
                            <id>assemble-all</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
        <!-- ... -->
    
    <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
        <id>epigno-jar-with-dependencies</id>
        <formats>
            <format>jar</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/</outputDirectory>
                <useProjectArtifact>true</useProjectArtifact>
                <unpack>true</unpack>
                <scope>runtime</scope>
                <!-- Exclude all META-INF/kie.conf during unpacking -->
                <unpackOptions>
                    <excludes>
                        <exclude>META-INF/kie.conf</exclude>
                    </excludes>
                </unpackOptions>
            </dependencySet>
        </dependencySets>
        <files>
            <file>
                <!-- Manually copy your custom kie configuration file from your repository. -->
                <!-- Please replace this path by whatever path is relevant for your project. -->
                <source>src/main/resources/META-INF/kie.conf</source>
                <outputDirectory>META-INF</outputDirectory>
            </file>
        </files>
    </assembly>
    
    mvn package