1

Maven を使用して構築された Netbeans RCP アプリケーションで BioJava を動作させるのに問題があります。POM でパブリックとして org.biojava.* および org.forester.* パッケージを含む、Maven モジュールをラッパーとして作成しました。次に、別のモジュールからラッパーを依存関係として設定し、テスト用に 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 では、クラスが検出され、オートコンプリートで使用され、プロジェクトが正常にビルドされます。いずれの場合も、主に依存関係が正しく設定されていることを示しています。

4

2 に答える 2

0

まず最初に、特に useOSGiDependencies==true を定義しているため、ラッパー モジュールのマニフェストをチェックして、すべてのエントリが正しく生成されているかどうかを確認します。biojava jar に osgi ヘッダーが含まれていて、jar をモジュールにラップしていない可能性がありますが、osgi プラグインへの依存関係を宣言しています。

ただし、アプリのロックは奇妙です。実行時の依存関係に何か問題があった場合、初期の「満たされていない依存関係」エラーが予想されます。スレッド ダンプを作成して、何が起こっているかを確認することをお勧めします。デッドロックが発生している可能性があります。または、アクション (jButton1ActionPerformed) が AWT から呼び出されるため、読み取り全体に時間がかかり、UI スレッドがロックされている可能性があります。

于 2015-11-02T21:30:14.477 に答える
0

私は多くの検索を行い、実際の原因は BioJava 全体で使用されている slf4j であることがわかりました。プラットフォーム アプリケーションがフリーズする理由はわかりませんが、モジュールに slf4j ロガーを作成することで、モジュールがインストールされないようにすることができます。ラッパー モジュールのソリューションをオンラインで見たことがありorg.slf4j:slf4j-api:x.y.zますorg.slf4j:slf4j-jdk14:x.y.zorg.slf4j.*公開パッケージに追加します。POM は次のとおりです。

<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>group</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
</parent>
<artifactId>slf4jwrapper</artifactId>
<packaging>nbm</packaging>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>nbm-maven-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <publicPackages>
                    <publicPackage>org.slf4j.*</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.netbeans.api</groupId>
        <artifactId>org-netbeans-api-annotations-common</artifactId>
        <version>${netbeans.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.7</version>
    </dependency>
</dependencies>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

ラッパーは、BioJava 依存モジュールで使用する必要がありますが、slf4j に依存する他のモジュールでも機能するはずです。

于 2015-11-10T18:52:25.773 に答える