我正在尝试编译github存储库,https://github.com/grammarviz2/grammarviz2_src。但是,当我在CMD上运行该应用程序时,我会收到错误 -
GrammarVizGUI.java:4: error: package net.seninp.grammarviz.controller does not exist
import net.seninp.grammarviz.controller.GrammarVizController;
^
GrammarVizGUI.java:5: error: package net.seninp.grammarviz.model does not exist
import net.seninp.grammarviz.model.GrammarVizModel;
^
GrammarVizGUI.java:6: error: package net.seninp.grammarviz.view does not exist
import net.seninp.grammarviz.view.GrammarVizView;
^
GrammarVizGUI.java:17: error: cannot find symbol
private static GrammarVizModel model;
^
symbol: class GrammarVizModel
location: class GrammarVizGUI
GrammarVizGUI.java:20: error: cannot find symbol
private static GrammarVizController controller;
^
symbol: class GrammarVizController
location: class GrammarVizGUI
GrammarVizGUI.java:23: error: cannot find symbol
private static GrammarVizView view;
^
symbol: class GrammarVizView
location: class GrammarVizGUI
GrammarVizGUI.java:48: error: cannot find symbol
model = new GrammarVizModel();
^
symbol: class GrammarVizModel
location: class GrammarVizGUI
GrammarVizGUI.java:51: error: cannot find symbol
controller = new GrammarVizController(model);
^
symbol: class GrammarVizController
location: class GrammarVizGUI
GrammarVizGUI.java:54: error: cannot find symbol
view = new GrammarVizView(controller);
^
symbol: class GrammarVizView
location: class GrammarVizGUI
9 errors
但是,在仔细检查时,我看到源中的许多软件包都存在于多个文件夹中。我在运行Java代码方面的经验几乎为零,因此我相信我必须犯一些愚蠢的错误。
缺少一些东西,让我们逐步进行:
缺少JAR-Plugin配置(汇编插件配置不足以在MANIFEST.MF
Main-Class
将此插件配置添加到profile
single
...
<profile>
<id>single</id>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>net.seninp.grammarviz.GrammarVizGUI</mainClass>
</manifest>
</archive>
<!-- <filters> <filter>src/assembly/filter.properties</filter> </filters>
<descriptors> <descriptor>src/assembly/distribution.xml</descriptor> </descriptors> -->
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>net.seninp.grammarviz.GrammarVizGUI</mainClass>
</manifest>
</archive>
<!-- <filters> <filter>src/assembly/filter.properties</filter> </filters>
<descriptors> <descriptor>src/assembly/distribution.xml</descriptor> </descriptors> -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
...
然后,您需要在构建过程中使用此配置文件:
mvn -Psingle clean package
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.949 s
[INFO] Finished at: 2019-03-21T21:30:25+01:00
[INFO] Final Memory: 28M/435M
[INFO] ------------------------------------------------------------------------
它在target
目录中创建2个jar
文件:
grammarviz2-0.0.1-SNAPSHOT.jar
grammarviz2-0.0.1-SNAPSHOT-jar-with-dependencies.jar
然后您需要运行该应用程序(来自target
目录):
java -jar grammarviz2-0.0.1-SNAPSHOT-jar-with-dependencies.jar
此jar
包含一个MANIFEST.MF
文件(/META-INF/MANIFEST.MF
),该文件在pom.xml
中配置了适当的条目,可以运行此jar
作为应用程序,而无需提供主类。
"在我的机器上工作":
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
Linux Mint 18.3
您需要使用依赖项创建JAR文件。在Intellij中,就是这样:
文件 ->项目结构 ->伪像 ->单击' ' -> jar-> 来自具有依赖项的模块
然后显示一个小窗口,您必须在其中指定主要方法具有哪个类,然后单击"确定",然后在项目结构中也可以。然后构建工件并导航到伪像文件夹中,在该文件夹中将在该文件夹中正常创建jar文件,在名为"伪像"的项目中。