我在这里呆了太久了。我有一个只有一个依赖项的Maven项目:
ERROR: syntax error at or near "IF"
LINE 61: IF (v_isAdmin > 0) OR (v_isPM > 0) OR (v_isDelgate >0)
^
我正在使用IDE,它本身安装了所有必需的依赖项。我编写了一个简单的代码,使用了<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.8.0</version>
</dependency>
中的类。要创建一个包,我做了net.sf.jasperreports
,并创建了mvn package
。当我尝试以jar
的身份运行jar
时,出现了一个错误,提示java -jar myjar.jar
我只是不明白如何解决这个问题。 IDE能够找到类,但是当从命令行调用时,IDE无法找到类。这是为什么?我该怎么办?
我什至试图将Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRDataSource
保留在jasperreports-6.8.0.jar
,但是那也不起作用。
/Library/Java/Extensions/
的外观如下:
pom.xml
答案 0 :(得分:0)
这是在我的项目中使用Maven阴影插件的部分,当然与您的完全不同:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<artifactSet>
<includes>
<include>org.apache.poi:poi</include>
<include>org.apache.poi:poi-ooxml</include>
<include>org.apache.poi:poi-ooxml-schemas</include>
<include>org.apache.commons:commons-collections4</include>
<include>org.apache.xmlbeans:xmlbeans</include>
<include>org.apache.commons:commons-compress</include>
</includes>
<excludes>
<!-- Exclude main jar to avoid error 'Failed to create shaded artifact,
project main artifact does not exist' -->
<exclude>${project.groupId}:${project.artifactId}</exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
请注意,
pom.xml
的这一部分进入<plugins> ... </plugins>
部分,就我而言,它位于maven编译器插件下方和maven jar插件下方。您可以明确包含某些依赖项,也可以明确排除某些依赖项。
结果将是目标文件夹中的2个文件,我个人使用的是原始名称的文件,另一个文件的原始名称以 shaded 或类似名称扩展。
如果在显示错误消息 ...中没有主清单属性,则按如下所示更改 maven jar插件的配置:
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
<mainClass>com.suhail.main.CommandLineRunner</mainClass>
</configuration>
答案 1 :(得分:-1)
使用Maven程序集插件而不是Maven jar插件。
请参见what-are-the-differences-between-maven-jar-plugin-and-maven-assembly-plugin!
Maven程序集插件会创建一个完全可部署的程序包,其中包含所有依赖项。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>com.suhail.main.CommandLineRunner</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>