使BioJava在使用Maven构建的Netbeans RCP应用程序中工作时遇到问题。我已经创建了一个Maven模块作为包装,包括在POM中公开的org.biojava。*和org.forester。*包。然后,从另一个模块中,将包装器设置为依赖项,并使用BioJava食谱中的一些基本示例进行测试。

每当我尝试从BioJava实例化类的某个对象时,应用程序都会冻结,并且必须使用Windows任务管理器将其杀死。

这是包装程序的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>nl.hecklab.bioinformatics</groupId>
        <artifactId>Spider-parent</artifactId>
        <version>1.0.0</version>
    </parent>
    <artifactId>BiojavaWrapper</artifactId>
    <version>4.1.0</version>
    <packaging>nbm</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>nbm-maven-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <useOSGiDependencies>true</useOSGiDependencies>
                    <publicPackages>
                        <publicPackage>org.biojava.*</publicPackage>
                        <publicPackage>org.forester.*</publicPackage>
                    </publicPackages>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <useDefaultManifestFile>true</useDefaultManifestFile>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.biojava</groupId>
            <artifactId>biojava-alignment</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>


这是我尝试使用的一些代码。这只是一个非常粗糙的示例,从TopComponent中的按钮调用。输入和输出只是文本字段。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    Reader r = new Reader(new File("D:\\current\\fastafile.fasta"));
    for (ProteinSequence a : r.getSequences()) {
        input.append(a.toString());
    }
    Profile<ProteinSequence, AminoAcidCompound> profile = Alignments.getMultipleSequenceAlignment(r.sequences);
    output.setText(String.format("Clustalw:%n%s%n", profile));

    ConcurrencyTools.shutdown();


}


这是读者类:

public class Reader {

    List<ProteinSequence> sequences = new ArrayList<>();

    public Reader(File fastaFile) {

        try {

            FileInputStream inStream = new FileInputStream(fastaFile);
            FastaReader<ProteinSequence, AminoAcidCompound> fastaReader
                    = new FastaReader<>(
                            inStream,
                            new GenericFastaHeaderParser<ProteinSequence, AminoAcidCompound>(),
                            new ProteinSequenceCreator(AminoAcidCompoundSet.getAminoAcidCompoundSet()));
            LinkedHashMap<String, ProteinSequence> b = fastaReader.process();

            sequences.addAll(b.values());
        } catch (IOException ex) {
            Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public List<ProteinSequence> getSequences() {
        return sequences;
    }

}


在(Netbeans)IDE中,可以自动完成查找并使用这些类,并且可以成功构建项目,在每种情况下,基本上都表示正确设置了依赖项。

最佳答案

首先,检查包装器模块的清单以查看是否正确生成了所有条目,尤其是因为您定义了useOSGiDependencies == true。可能是biojava jar包含osgi标头,然后您没有将jar包装在模块中,而是声明了对osgi插件的依赖。

但是,锁定应用程序很奇怪,如果运行时依赖项出了点问题,我可能会想到一个早期的“不满意的依赖项”错误。您可能要创建一个线程转储并检查发生了什么。也许你陷入僵局。或者由于您的动作(jButton1ActionPerformed)是从AWT调用的,因此整个阅读过程可能会花费一些时间,并且您的UI线程已被锁定。

07-28 09:01