当前位置: 首页 > 知识库问答 >
问题:

带Maven bundle插件的OSGi未加载库

翟永春
2023-03-14

我正在开发一个大的应用程序,我们在代理中使用Mavem bundle插件,使其变小!我在导入一些需要的库以处理PDFbox所需的某种图像(jpeg2000和jbig2)时遇到问题。

这是我的pom(一部分)

<?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">

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>xxxx</groupId>
    <artifactId>xxx</artifactId>
    <version>2.0.7</version>
</parent>

<artifactId>proxy-bundle</artifactId>
<name>Front-End Proxy Bundle</name>
<version>${proxy.version}</version>
<packaging>bundle</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<profiles>
    <profile>
        <id>compile-entity-schemas</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <version>0.8.3</version>
                    <executions>
                        <execution>
                            <id>entity-schemas</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                            <configuration>
                                <extension>true</extension>
                                <schemaDirectory>src/main/resources/schema</schemaDirectory>
                                <schemaIncludes>
                                    <schemaInclude>text-form-configuration.xsd</schemaInclude>
                                </schemaIncludes>
                                <generateDirectory>src/main/java</generateDirectory>
                                <generatePackage>xxx</generatePackage>
                                <args>
                                    <arg>-no-header</arg>
                                    <arg>-extension</arg>
                                </args>
                                <plugins>
                                    <plugin>
                                        <groupId>org.jvnet.jaxb2_commons</groupId>
                                        <artifactId>jaxb2-basics</artifactId>
                                        <version>0.6.4</version>
                                    </plugin>
                                </plugins>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

<build>
    <finalName>proxy-bundle</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>invalid_image.png</exclude>
                <exclude>bfa_logo.png</exclude>
                <exclude>footer_image.png</exclude>
                <exclude>check-front-image-template.jpg</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>invalid_image.png</include>
                <include>bfa_logo.png</include>
                <include>footer_image.png</include>
                <include>check-front-image-template.jpg</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.7</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <goals>
                        <goal>install</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <instructions>
                    <Import-Package>
                        org.apache.pdfbox;version="[0.0,3)",
                        org.apache.pdfbox.cos.*;version="[0.0,3)",
                        com.levigo.jbig2.*;version="[0.0,3)",
                        com.github.jaiimageio.jpeg2000.*;version="[0.0,3)",
                        com.github.jaiimageio.*;version="[0.0,3)",
                        org.apache.commons.configuration;version="[0.0,2)",
                        org.apache.commons.logging;version="[0.0,2)",
                        org.apache.commons.io.*;version="[0.0,3)",
                        org.slf4j;version="[0.0,2)",
                        org.apache.commons.jcs.*;version="[0.0,3)",
                        eu.bitwalker.useragentutils.*;version="[0.0,3)",
                        *
                    </Import-Package>
                    <Bundle-Activator>com.criticalsoftware.frontend.proxy.main.ProxyBundleActivator</Bundle-Activator>
                    <Bundle-ClassPath>.,{maven-dependencies}</Bundle-ClassPath>
                </instructions>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.zeroturnaround</groupId>
            <artifactId>jrebel-maven-plugin</artifactId>
             <version>${jrebel-maven-plugin.version}</version>
            <executions>
                <execution>
                    <id>generate-rebel-xml</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>xxx</groupId>
            <artifactId>jrebel-remote-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>generate-rebel-remote-xml</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>remote-generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.zeroturnaround
                                    </groupId>
                                    <artifactId>jrebel-maven-plugin</artifactId>
                                    <versionRange>
                                        [1.1.0,)
                                    </versionRange>
                                    <goals>
                                        <goal>generate</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<dependencies>
    <!-- Dev Model -->
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>jcc-core-common</artifactId>
    </dependency>

    <dependency>
        <groupId>xxx</groupId>
        <artifactId>jcu-core-utils-common</artifactId>
    </dependency>

    <!-- Web Server -->
    <dependency>
        <groupId>org.simpleframework</groupId>
        <artifactId>simple</artifactId>
    </dependency>

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>

    <!-- Apache Commons -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
    </dependency>

    <!-- Serialization -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-runtime</artifactId>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>

    <!-- Image Editing -->
    <dependency>
        <groupId>com.jhlabs</groupId>
        <artifactId>filters</artifactId>
    </dependency>
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>image-detector-api</artifactId>
    </dependency>

    <!-- PDF -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox-tools</artifactId>
    </dependency>
    <dependency>
        <groupId>com.levigo.jbig2</groupId>
        <artifactId>levigo-jbig2-imageio</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-jpeg2000</artifactId>
    </dependency>

    <!-- OSGi -->
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.osgi.core</artifactId>
    </dependency>

    <!-- Others -->
    <dependency>
        <groupId>com.sun.jna</groupId>
        <artifactId>jna</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jcs-core</artifactId>
    </dependency>
    <!-- Necessary to fix parallel build when the maven repository is empty -->
    <dependency>
        <groupId>xxxs</groupId>
        <artifactId>xxx</artifactId>
        <version>${project.version}</version>
        <scope>compile</scope>
        <type>pom</type>
    </dependency>

    <!-- UA Utils -->
    <dependency>
        <groupId>eu.bitwalker</groupId>
        <artifactId>UserAgentUtils</artifactId>
    </dependency>

    <!-- test -->
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

我修复了导入包,我不再有警告了!

这是我的nethod,pdfBox使用这些库,我在try/catch块中遇到了一个异常!

private static boolean checkPDFImagesSize(PDDocument document) {
PDPageTree list = document.getPages();
PDXObject o;
for (PDPage page : list) {
    PDResources pdResources = page.getResources();
    for (COSName cosName : pdResources.getXObjectNames()) {
        try {
            o = pdResources.getXObject(cosName);
        } catch (IOException e) {
            throw ProxyRuntimeException.of(ExceptionCodes.ERROR_GENERATING_PDF_IMAGES);
        }
        if (o instanceof org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) {
            if (((PDImageXObject) o).getHeight() * ((PDImageXObject) o).getWidth() * ((PDImageXObject) o)
                    .getBitsPerComponent() * 3.0 > ALERT_IMAGE_SIZE_INSIDE_PDF) {
                return false;
            }
        }
    }
}
return true;

}

在IntelliJ中调试时,我得到了这个!

组织。阿帕奇。pdfbox。滤器MissingImageReaderException:无法读取JPEG2000图像:未安装Java高级图像(JAI)图像I/O工具

共有1个答案

施华奥
2023-03-14

我看错了问题!问题不在于JPEG2000/JBIG2依赖项,而在于javax.imageio.spi.Service注册表,它在OSGi中的ServiceLoder没有问题,是从PDFBox调用的。正如这里所描述的: OSGi java. Util. ServiceLoader

所以我必须实施这个解决方案。OSGi Aries spi fly

 类似资料:
  • 我用tensorflow_插件中的keras层和权重标准化层训练了一个模型。这是我以tensorflow文件格式培训和保存的模型: (它没有自定义指标) 但当我加载模型时,它会返回一个错误: ---------------------------------------------------------------------------2中的KeyError回溯(最近一次调用最后一次)返回3-

  • 信息:validateJarFile(C:\program Files(x86)\apache-tomcat-7.0.47\webapps\myapp\web- inf\lib\servlet-api-2.5-6.1.11.jar)-jar未加载。参见Servlet Spe C2.3,第9.7.2节。违规类:javax/servlet/servlet.class 16-gen-2014 14.18

  • 问题内容: 我使用了来自Maven回购的log4j-1.2.17捆绑包。我尝试在捆绑软件中执行此代码(我的捆绑软件调用了log4j-1.2.17捆绑软件) 但是我有错误 捆绑包已按顺序加载 如何解决这个错误?拜托,对不起我的英语。最好的问候,亚瑟。 问题答案: 由于您的Log4j类似乎已由sun.misc类加载器加载,我认为某些东西正在从OSGi外部提供log4j类。有Log4J条目解释了为什么它

  • 问题内容: 我开始开发Eclipse插件(从技术上讲,是OSGi插件),遇到的第一个问题是我似乎无法像往常一样控制commons-logging输出。 我在插件依赖项中包含了commons- logging包,的确,当我记录某些信息(信息为INFO或更高严重性)时,它会记录到控制台。但是,我似乎无法以任何较低级别登录(例如DEBUG或TRACE)。 我已经指定了一个log4j.properties

  • 我的插入符号包有问题,请查看下面的错误, 错误:Dyn.load(file,DLLpath=DLLpath,...)中“cert”的包或命名空间加载失败:无法加载共享对象“/library/framework/R.framework/versions/4.0/resources/library/rcpp/libs/rcpp.so”:dlopen(/library/framework/R.frame

  • 我如何实现这一点?我尝试将OSGi捆绑包作为JarInputstream读取,并读取捆绑激活器完全限定的类路径,并尝试使用class.forName(“”)和转换到BundleActivator接口的类型来实例化它。但是在启动它的同时,它将bundle上下文作为参数来启动方法。 有没有办法,我可以把OSGi包实用地交给容器,这样它就会负责安装和启动包,然后我的UI就会自动在显示中获取这个新的包名。