AIDnD-mvnpy

Library that enables abstraction over interaction with Maven framework Java projects


License
MIT
Install
pip install AIDnD-mvnpy==1.0.1

Documentation

mvnpy

Library that enables abstraction over interaction with Maven framework Java projects

REQUIREMENTS

  • Git (1.7.x or newer)
  • Python 2.7

INSTALL

If you have downloaded the source code:

python setup.py install

RUNNING TESTS

To run the the tests, simply run:

python Test.py

API

Initiating repo:

>>> from Repo import Repo
>>> mvn_repo = Repo('C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj')

Applying maven commands:

test

C:\Users\user\Code\Python\mvnpy\mvnpy>python2
Python 2.7.15 |Anaconda, Inc.| (default, May  1 2018, 18:37:09) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from Repo import Repo
>>> mvn_repo = Repo('C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj')
>>> build_log = mvn_repo.test()
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] GMT_P                                                              [pom]
[INFO] sub_mod_1                                                          [jar]
[INFO] sub_mod_2                                                          [jar]
[INFO]
[INFO] ----------------------------< GMT_P:GMT_P >-----------------------------
[INFO] Building GMT_P 1.0-SNAPSHOT                                        [1/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --------------------------< GMT_P:sub_mod_1 >---------------------------
[INFO] Building sub_mod_1 1.0-SNAPSHOT                                    [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sub_mod_1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ sub_mod_1 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ sub_mod_1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ sub_mod_1 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ sub_mod_1 ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running MainTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.239 s - in MainTest
[INFO] Running p_1.AmitTest
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s - in p_1.AmitTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --------------------------< GMT_P:sub_mod_2 >---------------------------
[INFO] Building sub_mod_2 1.0-SNAPSHOT                                    [3/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sub_mod_2 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_2\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ sub_mod_2 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ sub_mod_2 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_2\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ sub_mod_2 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ sub_mod_2 ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running NaimTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.223 s - in NaimTest
[INFO] Running p_1.AssafTest
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.059 s - in p_1.AssafTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] GMT_P 1.0-SNAPSHOT ................................. SUCCESS [  0.021 s]
[INFO] sub_mod_1 .......................................... SUCCESS [ 19.385 s]
[INFO] sub_mod_2 1.0-SNAPSHOT ............................. SUCCESS [  9.234 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 29.541 s
[INFO] Finished at: 2018-10-13T14:18:37+03:00
[INFO] ------------------------------------------------------------------------

clean

C:\Users\user\Code\Python\mvnpy\mvnpy>python2
Python 2.7.15 |Anaconda, Inc.| (default, May  1 2018, 18:37:09) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from Repo import Repo
>>> mvn_repo = Repo('C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj')
>>> build_log = mvn_repo.clean()
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] GMT_P                                                              [pom]
[INFO] sub_mod_1                                                          [jar]
[INFO] sub_mod_2                                                          [jar]
[INFO]
[INFO] ----------------------------< GMT_P:GMT_P >-----------------------------
[INFO] Building GMT_P 1.0-SNAPSHOT                                        [1/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ GMT_P ---
[INFO]
[INFO] --------------------------< GMT_P:sub_mod_1 >---------------------------
[INFO] Building sub_mod_1 1.0-SNAPSHOT                                    [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sub_mod_1 ---
[INFO] Deleting C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\target
[INFO]
[INFO] --------------------------< GMT_P:sub_mod_2 >---------------------------
[INFO] Building sub_mod_2 1.0-SNAPSHOT                                    [3/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sub_mod_2 ---
[INFO] Deleting C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_2\target
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] GMT_P 1.0-SNAPSHOT ................................. SUCCESS [  1.094 s]
[INFO] sub_mod_1 .......................................... SUCCESS [  0.074 s]
[INFO] sub_mod_2 1.0-SNAPSHOT ............................. SUCCESS [  0.114 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.964 s
[INFO] Finished at: 2018-10-13T14:21:52+03:00
[INFO] ------------------------------------------------------------------------

test-compile: mvn_repo.test_compile() ...

If one desires in inspecting a specific submodule (which can decrease the build time significantly), one can specify the module he's interested in:

>>> build_log = mvn_repo.test('MavenProj\sub_mod_1')
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] GMT_P                                                              [pom]
[INFO] sub_mod_1                                                          [jar]
[INFO]
[INFO] ----------------------------< GMT_P:GMT_P >-----------------------------
[INFO] Building GMT_P 1.0-SNAPSHOT                                        [1/2]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --------------------------< GMT_P:sub_mod_1 >---------------------------
[INFO] Building sub_mod_1 1.0-SNAPSHOT                                    [2/2]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sub_mod_1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ sub_mod_1 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ sub_mod_1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ sub_mod_1 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to C:\Users\user\Code\Python\mvnpy\mvnpy\examples\MavenProj\sub_mod_1\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ sub_mod_1 ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running MainTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.063 s - in MainTest
[INFO] Running p_1.AmitTest
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s - in p_1.AmitTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] GMT_P 1.0-SNAPSHOT ................................. SUCCESS [  0.024 s]
[INFO] sub_mod_1 1.0-SNAPSHOT ............................. SUCCESS [ 18.848 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.454 s
[INFO] Finished at: 2018-10-13T14:27:12+03:00
[INFO] ------------------------------------------------------------------------   

Change pom tags:

set_pom_tag(xquery, value , module = '', create_if_not_exist = False)

@module - the path to the module associated with the pom that will be modified @xquery - xquey AKA xpath string that describes the tag, that it's text will be change to value @create_if_not_exist - setting to true will add tags missing in the pom if they're missing

Example:

BEFORE
tika/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">
  <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <excludes>
                <exclude>**/ForkParser*Test.java</exclude>
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </build>
<project>

. . .

Python 2.7.15 |Anaconda, Inc.| (default, May  1 2018, 18:37:09) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import Repo
>>> xquery = r"./build/plugins/plugin[artifactId = 'maven-surefire-plugin']/version"
>>> value = '2.21.0'
>>> repo = Repo.Repo(r'C:\Users\TEMP\mvnpy\mvnpy\static_files\tika')
>>> repo.set_pom_tag(xquery = xquery, value = value ,create_if_not_exist=True)

AFTER
tika/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">
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>CHANGES.txt</exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>'maven-surefire-plugin'</artifactId>
            <version>2.21.0</version>
        </plugin>
    </plugins>
</build>
<project>

. . .