我有一个Java项目,该项目连接到Oracle 12c数据库。以前,ojdbc jar(以及所有其他依赖项)必须位于classpath上才能运行。但是,这打算成为一个独立的应用程序,因此我想设置一个构建过程,最后将一个包含所有依赖项的jar吐出。我做了以下步骤:
select m.id_system, m.sensor, m.value, m.insert_date, s.name, s.type
join measures m
join system s on m.id_system = s.id_system
from (
select m.id_system, m.sensor, max(m.insert_date) max_insert_date
from measures m
join system s on m.id_system = s.id_system and s.type = 'Type1'
group by m.id_system, m.sensor
) t on t.id_system = m.id_system and
t.sensor = m.sensor and
t.max_insert_date = m.insert_date
where s.type = 'Type1'
生成的jar以类文件的形式包含大多数依赖项,例如在包含Log4j类文件的jar的根目录中,有一个“ org / apache / log4j”文件夹。问题是ojdbc(com / oracle / jdbc)不存在,而我正在获得ClassNotFoundExceptions运行时。我检查了一下,并且.m2文件夹下的ojdbc jar位于正确的路径下。
有什么方法可以在我的可运行jar中以ojar或类文件的形式包含ojdbc依赖项?
编辑:基于Essex Boy的评论,我像这样使用了阴影插件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.path.to.Main</mainClass>
</manifest>
<manifestEntries>
<Built-On>${maven.build.timestamp} UTC</Built-On>
<ModuleName>${project.name}</ModuleName>
<ModuleVersion>${project.version}</ModuleVersion>
</manifestEntries>
<manifestSections>
<manifestSection>
<name>Release section</name>
<manifestEntries>
<BaseVersion>${baseversion}</BaseVersion>
<BuildNumber>${buildnumber}</BuildNumber>
<GITRevision>${gitrevision}</GITRevision>
</manifestEntries>
</manifestSection>
</manifestSections>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
有了这个,我得到了一个类似的jar,大多数依赖,但是ojdbc仍然被排除在外。我试图添加一个artifactSet标签,并明确包含“ com.oracle.jdbc:ojdbc8”,但仍然没有添加。唯一的好处是,通过使用minimumJar选项,我得到了一个较小的jar,其中仅包含实际的依赖项。
答案 0 :(得分:-1)
找到答案了。你需要设置这个。
Class.forName("oracle.jdbc.driver.OracleDriver")