Python 2.7 Maven命令行:如何将统一的jar文件拆分为两个独立的部分?

Python 2.7 Maven命令行:如何将统一的jar文件拆分为两个独立的部分?,python-2.7,maven,intellij-idea,jar,Python 2.7,Maven,Intellij Idea,Jar,以下是上下文:我在两个独立的包中处理2个项目-MAIN和TESTS类。在我唯一的pom.xml文件(与主类位于同一个包中)中,我使用以下插件和目标添加了测试文件: 构建helpermaven插件&添加源代码-并添加测试文件路径的路径 maven资源插件和复制资源 maven汇编插件&单个 到目前为止,我成功地在python脚本中构建了1个jar文件,在3个命名插件和一个pom文件的帮助下,该文件包含MAIN和测试,其中测试作为资源添加。 我的目标是从我刚刚构建的jar文件中构建两个独立的ja

以下是上下文:我在两个独立的包中处理2个项目-MAIN和TESTS类。在我唯一的pom.xml文件(与主类位于同一个包中)中,我使用以下插件和目标添加了测试文件:

  • 构建helpermaven插件&添加源代码-并添加测试文件路径的路径
  • maven资源插件和复制资源
  • maven汇编插件&单个
到目前为止,我成功地在python脚本中构建了1个jar文件,在3个命名插件和一个pom文件的帮助下,该文件包含MAIN和测试,其中测试作为资源添加。 我的目标是从我刚刚构建的jar文件中构建两个独立的jar文件:MAIN和TESTS。但我不知道怎么做

编辑:

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- project coordinates -->
    <groupId>com.xyz</groupId>
    <artifactId>multi-app</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
            <module>app</module>
            <module>util</module>
    </modules>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

     <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>util</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
            </dependency>
            <dependency>
                    <groupId>commons-lang</groupId>
                    <artifactId>commons-lang</artifactId>
                    <version>2.4</version>
            </dependency>
    </dependencies>
    package com.xyz.util;

public class UserMsg {

        public static String getMessage() {
               return(" Hello World!");
        }
}
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>com.xyz</groupId>
                    <artifactId>util</artifactId>
                    <version>1.0</version>
            </dependency>
    </dependencies>
   package com.xyz;

import com.xyz.util.*;

public class App {

        public static void main(String[] args) {
                System.out.println(UserMsg.getMessage());
        }

}
父模块的pom.xml:

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- project coordinates -->
    <groupId>com.xyz</groupId>
    <artifactId>multi-app</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
            <module>app</module>
            <module>util</module>
    </modules>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

     <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>util</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
            </dependency>
            <dependency>
                    <groupId>commons-lang</groupId>
                    <artifactId>commons-lang</artifactId>
                    <version>2.4</version>
            </dependency>
    </dependencies>
    package com.xyz.util;

public class UserMsg {

        public static String getMessage() {
               return(" Hello World!");
        }
}
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>com.xyz</groupId>
                    <artifactId>util</artifactId>
                    <version>1.0</version>
            </dependency>
    </dependencies>
   package com.xyz;

import com.xyz.util.*;

public class App {

        public static void main(String[] args) {
                System.out.println(UserMsg.getMessage());
        }

}
第二个子模块的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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- project coordinates -->
    <groupId>com.xyz</groupId>
    <artifactId>multi-app</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
            <module>app</module>
            <module>util</module>
    </modules>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

     <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>util</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
            </dependency>
            <dependency>
                    <groupId>commons-lang</groupId>
                    <artifactId>commons-lang</artifactId>
                    <version>2.4</version>
            </dependency>
    </dependencies>
    package com.xyz.util;

public class UserMsg {

        public static String getMessage() {
               return(" Hello World!");
        }
}
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>com.xyz</groupId>
                    <artifactId>util</artifactId>
                    <version>1.0</version>
            </dependency>
    </dependencies>
   package com.xyz;

import com.xyz.util.*;

public class App {

        public static void main(String[] args) {
                System.out.println(UserMsg.getMessage());
        }

}
结果:

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- project coordinates -->
    <groupId>com.xyz</groupId>
    <artifactId>multi-app</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
            <module>app</module>
            <module>util</module>
    </modules>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

     <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>util</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
            </dependency>
            <dependency>
                    <groupId>commons-lang</groupId>
                    <artifactId>commons-lang</artifactId>
                    <version>2.4</version>
            </dependency>
    </dependencies>
    package com.xyz.util;

public class UserMsg {

        public static String getMessage() {
               return(" Hello World!");
        }
}
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
            <groupId>com.xyz</groupId>
            <artifactId>multi-app</artifactId>
            <version>1.0</version>
    </parent>

    <groupId>com.xyz</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>

    <dependencies>
            <dependency>
                    <groupId>com.xyz</groupId>
                    <artifactId>util</artifactId>
                    <version>1.0</version>
            </dependency>
    </dependencies>
   package com.xyz;

import com.xyz.util.*;

public class App {

        public static void main(String[] args) {
                System.out.println(UserMsg.getMessage());
        }

}
  • 我在父目录中成功地构建了两个jar文件

  • 另外,一个jar包含来自两个模块的所有文件,同时位于两个模块中的任何一个模块中,并确保设置了依赖项

  • 目标:

    <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/maven-v4_0_0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
    
        <!-- project coordinates -->
        <groupId>com.xyz</groupId>
        <artifactId>multi-app</artifactId>
        <version>1.0</version>
        <packaging>pom</packaging>
    
        <modules>
                <module>app</module>
                <module>util</module>
        </modules>
    
    <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/maven-v4_0_0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
    
         <parent>
                <groupId>com.xyz</groupId>
                <artifactId>multi-app</artifactId>
                <version>1.0</version>
        </parent>
    
        <groupId>com.xyz</groupId>
        <artifactId>util</artifactId>
        <version>1.0</version>
    
        <dependencies>
                <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.12</version>
                        <scope>test</scope>
                </dependency>
                <dependency>
                        <groupId>commons-lang</groupId>
                        <artifactId>commons-lang</artifactId>
                        <version>2.4</version>
                </dependency>
        </dependencies>
    
        package com.xyz.util;
    
    public class UserMsg {
    
            public static String getMessage() {
                   return(" Hello World!");
            }
    }
    
    <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/maven-v4_0_0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
                <groupId>com.xyz</groupId>
                <artifactId>multi-app</artifactId>
                <version>1.0</version>
        </parent>
    
        <groupId>com.xyz</groupId>
        <artifactId>app</artifactId>
        <version>1.0</version>
    
        <dependencies>
                <dependency>
                        <groupId>com.xyz</groupId>
                        <artifactId>util</artifactId>
                        <version>1.0</version>
                </dependency>
        </dependencies>
    
       package com.xyz;
    
    import com.xyz.util.*;
    
    public class App {
    
            public static void main(String[] args) {
                    System.out.println(UserMsg.getMessage());
            }
    
    }
    
  • 我希望在构建和请求完成后,将“组合”的jar文件拆分为2个jar文件
  • 另外,创建依赖于“util”模块的模块“app”的jar文件,同时定位在app目录中,而不是将创建这两个模块的根目录中。我希望这个罐子和“组合”的不同。例如,不包括“util”中的所有文件
  • 注意:当我在插件中添加依赖项或资源路径时,如下图所示,它不起作用

                <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${basedir}/../pathToNeededClassFiles</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

    任何建议都将不胜感激。谢谢

    在我看来,你用这些插件把项目复杂化了。根据你的文件夹结构,它应该已经开箱即用,而不需要添加这三个插件。如果你添加了,谢谢你的回答。但是,这对我是有效的。我正在进行的项目是按照我试图在上面解释的方式设计的:2个独立的包。到目前为止,所有的测试类都需要运行主类。移动测试类将不再尊重固有的设计——我不允许修改它,除了添加xml文件和脚本。另一方面,我尝试了这个例子:(在“如何一次构建多个项目?”一节中),但没有成功。在尝试我之前评论的链接中给出的多模块方法时,我得到了这些[WARNING]&[ERROR]在为appGrId:appGrId:jar:1.0.1构建有效模型时遇到了一些问题[警告]“org.codehaus.mojo:build helper maven插件”的“build.plugins.plugin.version”丢失。@第69行第12列[错误]反应器中的项目包含一个循环引用:“Vertex{label='appGrId:appTests:1.0.1'}”和“Vertex{label='appGrId:app:1.0.1'}之间的边”'介绍在图形中循环appGrId:app:1.0.1-->appGrId:appTests:1.0.1-->appGrId:app:1.0.1@此外,该示例中的问题是考虑的两个项目-app和wep app-它们都有一个主类。而在我的示例中,测试没有主类。您可以共享您的项目吗?或者有一个可下载的简化示例吗?