java - 在 Maven 程序集中包含共享对象

标签 java maven shared-libraries

我目前正在尝试使用 maven 和 sqlite4java 构建我的项目。在官方 Maven 存储库中可用。 官方sqlite4java page on google code确实有一个示例配置,但它有点过时并且不适合我的需要。我希望最后有一个 .jar 文件,我可以将其部署到其他地方。这里的问题是共享对象的依赖性。我正在使用他们页面上的官方构建目标将 so 复制到 build.dir/lib 但我的组装目标崩溃了:

[INFO] Failed to create assembly: Error adding file-set for 'com.almworks.sqlite4java:libsqlite4java-linux-i386:so:0.282' to archive: Error adding archived file-set. PlexusIoResourceCollection not found for: /home/lhw/.m2/repository/com/almworks/sqlite4java/libsqlite4java-linux-i386/0.282/libsqlite4java-linux-i386-0.282.so
No such archiver: 'so'.

我究竟做错了什么?这是我当前的 pom.xml 从与该主题无关的一些依赖项中剥离

<?xml version="1.0"?>
<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>
  <groupId>de.ring0.lhw</groupId>
  <artifactId>system</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>com.almworks.sqlite4java</groupId>
      <artifactId>sqlite4java</artifactId>
      <version>${sqlite4java.version}</version>
    </dependency>
    <dependency>
      <groupId>com.almworks.sqlite4java</groupId>
      <artifactId>libsqlite4java-linux-i386</artifactId>
      <version>${sqlite4java.version}</version>
      <type>so</type>
    </dependency>
  </dependencies>
  <properties>
    <sqlite4java.version>0.282</sqlite4java.version>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy</id>
            <phase>compile</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>com.almworks.sqlite4java</groupId>
                  <artifactId>libsqlite4java-linux-i386</artifactId>
                  <version>${sqlite4java.version}</version>
                  <type>so</type>
                  <overWrite>true</overWrite>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.2</version>
        <configuration>
          <skipTests>true</skipTests>
          <systemProperties>
            <property>
              <name>sqlite4java.library.path</name>
              <value>${project.build.directory}/lib</value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <archive>
                <manifest>
                  <mainClass>de.ring0.lhw.Init</mainClass>
                </manifest>
              </archive>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

最佳答案

编辑:

我认为 jar-with-dependencies 程序集描述符试图解压缩依赖项。

查看链接:

http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html

maven.apache.org/plugins/maven-assembly-plugin/... ...

<unpack>true</unpack>

当然,它无法解压 .so

所以你可能必须使用自定义程序集来执行你想做的事情

关于java - 在 Maven 程序集中包含共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197039/

相关文章:

java - Camel 单元测试设置了对模拟组件的期望

maven - 禁用 Maven 执行调试输出

java - 尝试找到 Maven 的 InvoiceStorage 依赖项

Go libstd.so 在 Alpine 上出现错误

java - 将 vector 保存到 cookie

java - Modbus4J Modbus RTU 主机

java - 为什么运行时找不到类?

maven - 解析器错误 cxf-beans.xml 找不到元素 'jaxws:endpoint' 的声明

c++ - 带有 boost 的 CMake(在 Windows 上):Could not find libraries?

c++ - 在有多个共享库的情况下,如何使类模板静态成员只有一个实例?